所以我试图用一些 UIViews 做一个长时间运行的动画。基本上我想要完成的是取一个方形子视图并让它在背景中的屏幕周围随机浮动(就像漂浮在池塘上的叶子一样)。我希望使用常规动画来做到这一点,但到目前为止,即使将选项设置为从当前位置开始,我也遇到了动画停止的问题。任何人都知道一个简单的方法来做到这一点?
我已经看到在屏幕上随机移动一个对象,但是由于递归,这不会最终导致堆栈溢出吗?
另外,我在问如何在没有添加库/框架的情况下做到这一点。
谢谢!
所以我试图用一些 UIViews 做一个长时间运行的动画。基本上我想要完成的是取一个方形子视图并让它在背景中的屏幕周围随机浮动(就像漂浮在池塘上的叶子一样)。我希望使用常规动画来做到这一点,但到目前为止,即使将选项设置为从当前位置开始,我也遇到了动画停止的问题。任何人都知道一个简单的方法来做到这一点?
我已经看到在屏幕上随机移动一个对象,但是由于递归,这不会最终导致堆栈溢出吗?
另外,我在问如何在没有添加库/框架的情况下做到这一点。
谢谢!
我为你写了这段代码:
- (CGFloat) distanceBetweenTwoPoints: (CGPoint) point1 : (CGPoint) point2 {
CGFloat dx = point2.x - point1.x;
CGFloat dy = point2.y - point1.y;
return sqrt(dx*dx + dy*dy );
}
#define kMovingSpeed 25 //pixel per second
- (void) floatView : (id) view_{
UIView *view = (UIView *)view_;
CGPoint viewCenter = view.center;
CGPoint nextCenter = CGPointMake(arc4random() % 320, arc4random() % (([self.view bounds].size.height > 480)?568:460));//or chech for orientation as well
if (CGPointEqualToPoint(viewCenter, nextCenter))
[self floatView:view];
float distance = [self distanceBetweenTwoPoints:viewCenter :nextCenter];
double time = distance / kMovingSpeed;
[UIView animateWithDuration:time
animations:^{
[view setCenter:nextCenter];
}
completion:^(BOOL finished) {
[self floatView:view];
}];
}