大家,这是我的代码:
- (void)viewDidLoad {
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0/60.0];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
[super viewDidLoad];
}
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
valueX = acceleration.x *20.0;
valueY = acceleration.y *-20.0;
int newX = (int)(imageView.center.x+valueX);
int newY = (int)(imageView.center.y+valueY);
CGPoint newCenter = CGPointMake(newX,newY);
imageView.center=newCenter;
UIImageView* imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ball.png"]];
imageView2.frame = CGRectMake(newX-12, newY-12, 24, 24);
[self.view addSubview:imageView2];
[UIView beginAnimations:nil context:imageView2];
[UIView setAnimationDuration:10.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
imageView2.frame = CGRectMake(newX-2, newY-2, 4, 4);
[imageView2 setAlpha:0.0];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(removeSmoke:finished:context:)];
[UIView commitAnimations];
if(imageView2.alpha=0){
[imageView2 removeFromSuperview];
}
[self.view bringSubviewToFront:imageView];
}
起初我的动画非常流畅,只有1.0 / 60.0但几秒后动画bug并不顺畅,我认为它变成了1.0 / 5.0。我不知道为什么。我该怎么解决这个问题?对不起我的英语我是法国人:/
答案 0 :(得分:1)
我并不完全清楚你想要实现的目标。似乎每次加速度计触发时,您都会添加一个新的imageView动画,并希望根据某些规则移动它,以及缩小图像。但是你的代码有问题。你永远不会打电话给[imageView2 release];
,所以一段时间后你可能会遇到记忆问题。
您可能也在方法@selector(removeSmoke:finished:context:)
中进行了太多计算,但我需要查看代码才能提供帮助。
如果您知道一次计划使用多少UIImageViews,最好预先加载它们,并将它们放在一个数组中以便于访问。这样,您可以移动一个UIImageView,然后移动到下一个。
如果你正在为iOS 4.0或更高版本拍摄,我还建议你使用Block Animations。它们更易于使用,我发现处理器也更容易。类似的东西:
[UIView animateWithDuration:10.5
animations:^{
CGRect newRect = imageView2.frame;
newRect.origin.x -= newX-2;
newRect.origin.y -= newY-2;
imageView2.frame = newRect;
}
completion:^(BOOL finished){
[UIView animateWithDuration:0.1
animations:^{
// This is where you complete your animation, maybe remove from view or something?
}
completion:^(BOOL finished){
;
}];
}];
最后,我建议您只设置imageView2.hidden = YES;
,而不是在视图中添加和删除,而不会被绘制,并且具有相同的效果。希望有所帮助!