iOS动画系列之---获取动画中的frame

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

对策:

每个 CALayer 有一个 presentationLayer 属性,当CAAnimation发生时,你在屏幕上看到的实际上是 presentation layer 的改变。如果你访问 presentation layer,QuartzCore 将会计算现有的帧状态,并且使用这个帧状态去构建 presentation layer 对象。因为动画状态在动画执行期间一直处于改变,因此你将会获得近似值。

presentationLayer 和 NSTimer 结合使用就可以满足前面需求

下面是demo:

- (void)viewDidLoad {

[superviewDidLoad];

self.imageView= [[UIViewalloc]init];

self.imageView.backgroundColor= [UIColorredColor];

self.imageView.frame=CGRectMake(100,100,100,150);

[self.viewaddSubview:self.imageView];

NSTimer*timer = [NSTimertimerWithTimeInterval:0.1target:selfselector:@selector(currentRect:)userInfo:nilrepeats:YES];

[[NSRunLoopcurrentRunLoop]addTimer:timerforMode:NSDefaultRunLoopMode];

[UIViewanimateWithDuration:5.0animations:^{

self.imageView.center=CGPointMake(200,300);

}];

}

-(void)currentRect:(NSTimer*)timer

{

CGRectimageViewCurrentRect = [[self.imageView.layerpresentationLayer]frame];

NSLog(@"x: %lf, y:%lf",imageViewCurrentRect.origin.x,imageViewCurrentRect.origin.y);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容