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

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

PHPz
PHPz

学习是最好的投资!

全部回覆(1)
迷茫

使用presentationLayer屬性可以獲得最新frame。
Sample:

- (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);
            });
        }
    });
}

參考連結

補充:
上面Sample的原理是動畫開始後,在低優先級子線程中透過presentationLayer來不斷獲取最新frame,直到動畫結束,當然這裡你可以使用NSTimer來實現。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板