我正在尝试为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命令会显示图像中心所在的正确坐标。 阿妮想法为什么? 也许这是错误的做法?
答案 0 :(得分:0)
所有UIKit类都不是线程安全的。因此,仅从主线程(view.center=newCenter;
)开始使用它们。