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

当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来实现。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板