美文网首页iOS 实用iOS DeveloperiOS技术
iOS动画系列之---获取动画中的frame

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

作者: LaurenceZi | 来源:发表于2017-01-25 14:40 被阅读93次

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

    }

    相关文章

      网友评论

        本文标题:iOS动画系列之---获取动画中的frame

        本文链接:https://www.haomeiwen.com/subject/ebitittx.html