2011-03-11 78 views
0

我想创建一个简单的翻译动画到UIImageView。 起初,我愿意使用[UIView动画]类,但是我意识到它不能对动画过程中的事件(例如与其他对象的简单碰撞)进行足够的控制。可可触摸 - 用定时器动画

我当时想过使用一个简单的线程,将修改我的UIImageView的中心坐标,然后睡觉,然后重复,直到动画完成,或者直到事情发生(见:碰撞或对象本身消失)

这是我写的代码:

-(void)animateImageView:(UIImageView*)view{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    float totalTime=6.0f; 
    float elapsedTime=0; 
     while(totalTime<=elapsedTime){ 
         if(conditions){...}//here are my checks 
      CGPoint newCenter=CGPointMake(view.center.x+10, view.center.y); 
      view.center=newCenter; 
      NSLog(@"%f",view.center.x); 
      elapsedTime+=0.1; 
      [NSThread sleepForTimeInterval:0.1]; 
      } 
    [view performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:YES]; 

    [pool release]; 

}

事实是,我的形象不会移动,但NSLog的命令显示正确的坐标在图像的中心。 Ani的想法为什么? 也许这是错误的方法?

+0

你试过把[view setNeedsDisplay]放进去吗?在那里?通常情况下,如果您更改框架,视图会重新绘制,但这可能值得一试。 – Robin 2011-03-11 11:10:47

+0

我试图插入那一行,没有任何变化。有时看起来像我的形象移动一点点,我不明白我错了什么.. – Lorenzo 2011-03-11 11:26:35

回答

0

所有的UIKit类都不是线程安全的。所以只能从主线程中使用它们(view.center=newCenter;)。

+1

你是对的。我通过主线程完成了新中心的分配,然后通过performSelectorOnMainThread调用它。现在起作用了。非常感谢你,我花了很多时间才发现这一点。 – Lorenzo 2011-03-11 11:37:01