我正在开发一款游戏,我希望我的图像逐渐缩小。当我的代码工作正常时,我会逐渐减小帧大小。 [我已经使用过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循环的情况下得到显示,即逐渐减少。是的,在调试时,它会逐步完成所有步骤。 有人可以帮帮我吗?
答案 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];
}