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

在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"];

}
时间: 2024-10-10 05:41:19

tableView使用定时器CADisplaylink改变imageView的transform的bug的相关文章

关情纸尾-----Quartz2D定时器CADisplayLink下雪效果

定时器CADisplayLink下雪效果 1.定时器雪花整体思路: 先在控制器View面绘制一个雪花. 在View加载完毕后,添加一个定时器. 在定时器方法当中调用得绘方法. 在绘图方法当不段的去修改雪花的Y值. 当雪花的Y值超过屏幕的高度时,让雪花的Y值重新设为0.从最顶部开始. 2.添加定时器实现方案 第一种采用NSTime 第二种采用CADisplayLink 最终采用CADisplayLink方案. 2.1为什么采用CADisplayLink方案不用NSTime? 首先要了解setNee

Objective-C三种定时器CADisplayLink / NSTimer / GCD的使用

OC中的三种定时器:CADisplayLink.NSTimer.GCD 我们先来看看CADiskplayLink, 点进头文件里面看看, 用注释来说明下 @interface CADisplayLink : NSObject { @private void *_impl; //指针 } + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel;//唯一一个初始化方法 - (void)addToRunLoop:(NS

[iOS]在tableview中用动画效果改变cell的高度

我们经常会碰到一些需要动画的地方,比如在TOP的发帖页面中,当我们选中一个文本编辑的cell时,cell的高度会动态的改变. 我们要的效果大概就是如下效果: 当我们选择一个cell的时候,我们就要改变它的高度,并且以动画的形式. 我们该如何实现这个效果呢?我们主要需要使用以下这两个方法: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath - (void)ta

tableview中用动画效果改变cell的高度

我们要的效果大概就是如下效果: 当我们选择一个cell的时候,我们就要改变它的高度,并且以动画的形式. 我们该如何实现这个效果呢?我们主要需要使用以下这两个方法: - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSInd

tableview 点击cell改变cell中的label.text的字体颜色,cell复用出现问题的解决方案2

关于Cell的复用问题,上次已经说了一种,但似乎那种方法不是最好的,所以说,今天下午根据别人提示,想到了此方法.还是老样子,可能不是最好的,但是实现了功能,至少比上次的要好一些. 题目要求:定义固定数据源,然后让tableview的行上各自显示第几行,然后点击选中的时候,字体颜色会变为红色,取消选中的时候字体变为黑色.然后最后的时候要输出选中的结果 解题思路:首先实现tableView的几个协议,然后定义一个模型,在模型中定义一个标识,然后通过点中的时候标识,然后判断标识解决Cell的复用. M

使用定时器通过改变图片的src来切换图片

点击以后开始自动切换图片 $("#page3_cover_1_back").click(function(){ var i=3; var haha=setInterval(function(){ $(".page3_cover_1").addClass('none'); $(".daojishi").removeClass("none"); var aaa="page3_"+parseInt(i);    

利用transform的bug使fixed相对于父级定位

首先,大家都清楚,元素使用fixed之后,若不设置top与left则会相对于最近的使用定位的父元素,并位于父元素的原点位置设置top与left值时,则会相对于窗口定位.但无论如何,此时仍相对于窗口定位,在此不过多描述. 今天发现的是当某一元素使用transform属性后,其所有使用fixed定位的子元素的fixed属性都会失效.此处可查看W3C文档https://www.w3.org/TR/css-transforms-1/#issue-ca2c412c 因此可以利用此bug时fixed元素相对

拖拽改变元素位置或大小bug修复

<!doctype html><html><head>   <meta charset="utf-8">   <title>无标题文档</title><style>body{   background:#000;}.upshop-view{   width:320px;   height:499px;   background:#fff;   background-size:contain;   pos

echarts折线图动态改变数据时的一个bug

echarts折线图中当增加dataZoom,修改start大于0的时候,会出现折线混乱,变成竖直的线,绘制有问题. 解决方法,在dataZoom中增加filterMode: 'empty' http://gallery.echartsjs.com/editor.html?c=xS1T_X893l&v=2