应用后,条件代码开始表现不同

时间:2010-01-04 10:41:58

标签: iphone cocoa-touch uiimageview

我正在开发一款游戏,我希望我的图像逐渐缩小。当我的代码工作正常时,我会逐渐减小帧大小。 [我已经使用过CGAffineTransform并且它不符合我的要求。]

-(void)function     
{
    ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z);

    if(ravanImage1.center.y>=300&&ravanImage1.center.y<=370)
    {
        q=60;
        z=60;
        ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z);
    }   

    if(ravanImage1.center.y>=230&&ravanImage1.center.y<=299)
    {
        q=40;
        z=40;
        ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z);
    }

    if(ravanImage1.center.y>=150&&ravanImage1.center.y<=229)
    {   
        q=20;
        z=20;
        ravanImage1.frame=CGRectMake(150,((ravanImage1.frame.origin.y)-5),q,z);
    }
}

但是当我为相同的代码应用while循环时,指定什么时候停止缩小帧(“当没有达到该点”时),它不会一点一点地显示图像帧缩小,因为它否则显示它,但直接将图像放在具有适当帧的终点处。          我希望它在没有while循环的情况下得到显示,即逐渐减少。是的,在调试时,它会逐步完成所有步骤。          有人可以帮帮我吗?

4 个答案:

答案 0 :(得分:1)

它之所以这样做是因为它可以非常快速地执行while循环。我认为最好的办法是在while循环的每一步之后放置一些延迟计时器,然后你会看到每一步,它不会只是“跳”到它的最终状态。

答案 1 :(得分:1)

正如其他人所指出的那样,手动调整视图框架会给你带来糟糕的表现。如果您确实不想使用标准UIView动画块来更改视图,则可以通过使用应用于视图图层的CAKeyframeAnimation来指定边界大小值以进行动画处理:

CAKeyframeAnimation * customSizeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"bounds.size"];
NSArray *sizeValues = [NSArray arrayWithObjects:[NSValue valueWithCGSize:size1], [NSValue valueWithCGSize:size2], [NSValue valueWithCGSize:size3], nil];
[customSizeAnimation setValues:frameValues];
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.5f], [NSNumber numberWithFloat:1.0f], nil]; 
[customSizeAnimation setKeyTimes:times];
customSizeAnimation.fillMode = kCAFillModeForwards;
customSizeAnimation.removedOnCompletion = NO;
[view.layer addAnimation: customSizeAnimation forKey:@"customSizeAnimation"];

此动画将从size1开始,在动画的中间点通过size2,以size3结束。您可以拥有任意数量的关键帧和动画时间,因此您应该能够达到您想要的效果

EDIT(1/5/2010):删除了kCAAnimationPaced作为calculateMode,这将导致忽略关键时间。另外,我忘记了frame was a derived property,所以你需要设置类似于边界大小的动画。

答案 2 :(得分:0)

[self setTimer: [NSTimer scheduledTimerWithTimeInterval: 3.5
                                                                    target: self
                                                                  selector: @selector (function_name)
                                                                  userInfo: nil
                                                                   repeats: YES]];

尝试使用它。

答案 3 :(得分:0)

这是我的移动功能,我试图改变我的imageView的大小。如果你能指出任何错误,我将非常感激......

- (无效)移动 {

UIImageView * imageViewForAnimation = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@“ravan.jpg”]];

imageViewForAnimation.alpha = 1.0f;
CGSize size1=CGSizeMake(60,60);
CGSize size2=CGSizeMake(40,40);
CGSize size3=CGSizeMake(20,20);
CAKeyframeAnimation *customFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"frame"];
NSArray *sizeValues = [NSArray arrayWithObjects:[NSValue valueWithCGSize:size1], [NSValue valueWithCGSize:size2], [NSValue valueWithCGSize:size3], nil];
[customFrameAnimation setValues:sizeValues];
customFrameAnimation.duration=10.0;
NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.5f], [NSNumber numberWithFloat:1.0f], nil]; 
[customFrameAnimation setKeyTimes:times];

customFrameAnimation.fillMode = kCAFillModeForwards;
customFrameAnimation.removedOnCompletion = NO;
[imageViewForAnimation.layer addAnimation:customFrameAnimation forKey:@“customFrameAnimation”];     [self.view addSubview:imageViewForAnimation]; }