uiimageView的帧动画减少了

时间:2011-08-13 12:22:32

标签: iphone xcode animation uiimageview frame

大家,这是我的代码:

- (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。我不知道为什么。我该怎么解决这个问题?对不起我的英语我是法国人:/

1 个答案:

答案 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;,而不是在视图中添加和删除,而不会被绘制,并且具有相同的效果。希望有所帮助!