iOS 实用iOS DeveloperiOS技术

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

2017-01-25  本文已影响93人  LaurenceZi

场景:当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);

}

上一篇下一篇

猜你喜欢

热点阅读