2013-05-18 32 views
1

所以我想用一些UIViews做長時間運行的動畫。基本上我想要完成的是採取一個方形的子視圖,讓它隨機漂浮在背景中的屏幕周圍(如浮在池塘中的一片葉子)。我希望通過常規動畫來做到這一點,但到目前爲止,即使將選項設置爲從當前位置開始,動畫也會停止。任何人都知道一個簡單的方法來做到這一點?漂浮在背景中的屏幕周圍的UIView

我看到Moving an object randomly around the screen已經但是不會因爲遞歸而最終導致堆棧溢出?

此外,我問如何做到這一點,而無需添加庫/框架。

謝謝!

+1

在你提到的*不*使用任何額外的框架,除了在iOS SDK中通用的標準的問題,接受的答案,而*不會*事業堆棧溢出是因爲沒有遞歸(Objective-C委託方法調用不會堆積在堆棧上,因爲堆棧每次都會清除)。 – Greg

+0

基本上,你的問題是你找到的問題的重複。 – Greg

+0

那麼有沒有辦法將它作爲一個重複項來關閉,或者我只是刪除了這個問題? – Kevin

回答

1

我寫了這個代碼,您:

- (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]; 
        }]; 
}