ios - 当UIView正在做动画时,如何获取UIView的frame?
PHPz
PHPz 2017-04-18 09:17:43
0
1
296

当UIView正在做动画时,如何获取UIView的frame?

PHPz
PHPz

学习是最好的投资!

répondre à tous(1)
迷茫

Utilisez l'attribut présentationLayer pour obtenir la dernière image.
Échantillon :

- (IBAction)move {
    CGRect destRect = self.frame;
    destRect.origin.x = 300 - destRect.origin.x;

    __block BOOL animationComplete = FALSE;
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents];
    [UIView animateWithDuration:0.5f delay:0.0f options:UIViewAnimationCurveEaseInOut
                     animations:^{
                         [self setFrame:destRect];
                     }
                     completion:^(BOOL finished) {
                         animationComplete = YES;
                         [[UIApplication sharedApplication] endIgnoringInteractionEvents];
                     }];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, (unsigned long)NULL), ^{
        while (!animationComplete) {
            dispatch_sync(dispatch_get_main_queue(), ^{
                CALayer *layer = self.layer.presentationLayer;
                CGRect frame = [layer frame];
                CGPoint point = [layer position];
                float currentTranslation = [[layer valueForKeyPath:@"transform.translation.x"] floatValue];
                NSLog(@"%.1f : %.1f : %.1f : %.1f : %.1f : %.1f",frame.origin.x, currentTranslation, frame.origin.x, layer.bounds.origin.x, layer.position.x, point.x);
            });
        }
    });
}

Lien de référence

Supplémentaire :
Le principe de l'exemple ci-dessus est qu'après le démarrage de l'animation, la dernière image est obtenue en continu via la présentationLayer dans le sous-thread de faible priorité jusqu'à la fin de l'animation. Bien sûr, vous pouvez utiliser NSTimer. pour y parvenir.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal