佚名通过本文主要向大家介绍了uiview动画,ios uiview动画,uiview,uiviewcontroller,ios uiview等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 当UIView正在做动画时,如何获取UIView的frame?
描述:
解决方案1:
描述:
当UIView正在做动画时,如何获取UIView的frame?
解决方案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来实现。