【问题标题】:Scale an image every time it collide with another每次与另一个图像碰撞时缩放图像
【发布时间】:2011-06-29 14:27:13
【问题描述】:

这是我的代码:

-(void)collision{
    if(CGRectIntersectsRect(imageView.frame,centre.frame)){
        imageView.alpha=0;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1.0f];
        centre.transform=CGAffineTransformMakeScale(1.3, 1.3);
        [UIView commitAnimations];
    }
}

当 imageView 与中心碰撞时,中心变大。 我的问题是,当“imageView”第二次与“中心”碰撞时,动画不起作用。每次imageView与中心碰撞时,我都想让中心越来越大,但它只会变大一次。对不起我的英语我是法国人:/ 请问我该如何解决这个问题?

【问题讨论】:

  • 这是什么语言?你编码是为了什么? iPhone还是安卓?尝试用与您的编程语言相关的标签替换您的 scale 标签

标签: iphone objective-c xcode animation uiimageview


【解决方案1】:

您的视图没有第二次缩放的原因是您每次都对其应用相同的变换 - 您每次都需要更改应用的变换:

...
centre.transform = CGAffineTransformScale(centre.transform, 1.3, 1.3);
...

【讨论】:

  • 当我使用你的代码时,我的图像“中心”很快就会变大,我的所有屏幕都会在一秒钟内变成我的图像。
  • @jean,是的,可能是因为您的比例因子太大 + 它呈指数增长(即每次都乘以 1.3)。您可能希望使用较低的比例因子和/或使用桃子的方法来单独跟踪比例值,并在每次迭代中添加 0.3
  • 我认为你是对的,它呈指数级增长,所以我怎么能解决这个问题,因为我不太了解“se peaches 的方法,分别跟踪规模值并在每次迭代中添加 0.3”: /
  • 在你的类中创建 scale 实例变量,在开始时用 1.0 初始化它,每次在你的函数中添加 0.3。然后按照桃子的建议创建您的变换
  • 您也可以在方法内创建静态局部变量,但在这种情况下,您将无法在方法外访问它,因此我认为创建 ivar 更好
【解决方案2】:

可能是之后没有应用比例尺。尝试每次增加刻度值。声明 float 以跟踪对象的比例。然后,在每次碰撞期间,在执行 CGAffineTransformMakeScale(scale, scale) 之前执行以下操作:

scale = scale + 0.3;

示例

-(void)collision{
    if(CGRectIntersectsRect(imageView.frame,centre.frame)){
        scale = scale + 0.3;
        imageView.alpha=0;
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:1.0f];
        centre.transform=CGAffineTransformMakeScale(scale, scale);
        [UIView commitAnimations];
    }
...

【讨论】:

  • 你能给我一个示例代码吗,因为我不太明白:/
  • +1,只有他需要使用浮点数而不是整数来存储刻度值:)
  • 我刚刚修改了我的建议,说“声明一个float...”
  • 你的代码有一个大问题:第一次发生碰撞时,比例会减小,然后当第二次发生碰撞时,图像会变得很大并消失
  • 您需要将字段比例初始化为 1。float scale = 1; 或类似的东西。这是用什么语言编码的?
猜你喜欢
  • 1970-01-01
  • 2013-12-08
  • 2018-01-24
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多