首页 > 其他 > 详细

tableView使用定时器CADisplaylink改变imageView的transform的bug

时间:2015-09-17 23:08:37      阅读:442      评论:0      收藏:0      [点我收藏+]

在UITableViewCell的imageView中,设置定时器CADisplayLink调用CGAffineTransformRotate改变transform时,

点击UItableViewCell时,会导致图标变形,代码如下:

@property(nonatomic,strong)CADisplayLink *link;

-(CADisplayLink *)link
{
    if (_link == nil) {
        //使用transform的方式旋转,每隔1/60秒移动一次,会改变imageView的frame
      _link = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
    }
    return _link;
}

-(void)update
{
    self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, M_PI_4 / 20);

}

-(void)startRotate
{
    [self.link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    }

-(void)stopRotate
{
 [self.link invalidate];
    self.link = nil;

   [UIView animateWithDuration:1.0 animations:^{
       
        self.imageView.transform = CGAffineTransformIdentity;      

   }];
}  

技术分享技术分享

2、改用CABasicAnimation动画,解决了变形问题

-(void)stopRotate
{

    [self.imageView.layer removeAnimationForKey:@"rotate-layer"];
    
}
-(void)startRotate
{

    //使用CABasicAnimation的方法,不会改变frame
    CABasicAnimation *anim = [CABasicAnimation animation];
    anim.keyPath = @"transform.rotation";
    anim.duration = 2;
    anim.repeatCount = 1000;
    anim.toValue = @(M_PI * 2);
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    [self.imageView.layer addAnimation:anim forKey:@"rotate-layer"];
    
  
}

 

tableView使用定时器CADisplaylink改变imageView的transform的bug

原文:http://www.cnblogs.com/aminopeptidase/p/4817810.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!