在objective-c中循环移动对象?

时间:2013-10-08 12:35:59

标签: objective-c loops uiviewanimation

我试图在UIView中移动while-loop。它没有在视觉上移动UIView,我觉得这很奇怪。根据我的经验,它在Obj-C中只有这样,为什么它在Obj-C中呢?只有在循环完成后才会在视觉上移动它。我不认为代码是需要的,它只是移动它的一行。

修改

请求代码,所以你去:

while (!CGPointEqualToPoint(finder.center, endPoint)) {
    [finder setCenter:CGPointMake(finder.center.x+10, finder.center.y)];
}

1行。

EDOT

好的,这不是全部,它是路径查找器。但那条线是移动UIView的那条线,所以我认为它是我问题中唯一相关的线。

3 个答案:

答案 0 :(得分:1)

因为在循环更新帧时,屏幕不会更新。 iOS决定何时自行更新屏幕。这就是为什么存在像setNeedsDisplay这样的方法但不存在像display这样的方法。因此,如果您在while循环中执行此操作,屏幕将仅更新一次。请参阅NSRunLoop文档。 https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/classes/NSRunLoop_Class/Reference/Reference.html

你好像想做那样的事情:

- (void)doSomeAnimation {
    [UIView animateWithDuration:0.5
                     animations:^{
                         self.someView.frame = CGRectMake(self.someView.frame.origin.x + 10,
                                                          self.someView.frame.origin.y,
                                                          self.someView.frame.size.width,
                                                          self.someView.frame.size.height);
                     } 
                     completion:^(BOOL finished){
                         if ([self needsDoAnimation]) // while condition analog 
                         { 
                             [self doSomeAnimation]; 
                         }
                     }];
}

- (BOOL)needsDoAnimation {
    BOOL needsAnimation = (self.someView.frame.origin.x < 320); // some conditions
    return needsAnimation;
}

查看什么是主要事件循环

https://developer.apple.com/library/ios/documentation/general/conceptual/Devpedia-CocoaApp/MainEventLoop.html

答案 1 :(得分:0)

我不确定我是否真的理解你的问题。 如果您想在特定的持续时间和特定的声誉中移动一个循环,为什么不编写一个方法来动画UIView UIAnimation块内的- (void)animateMyView:(UIView *)view withDuration:(float)duration andRepeat:(int)repeat{ [UIView animateWithDuration:duration animations:^{ view.frame = CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y + 20, self.view.frame.size.width, self.view.frame.size.height); } completion:^(BOOL finished) { if(repeat > 0){ [self animateMyView:view withDuration:duration andRepeat:(repeat - 1)]; } }]; } 以及动画后输入完成博客再次调用该方法。

{{1}}

这会在y轴上每次移动20.0时移动视图。

答案 2 :(得分:0)

如果要将视图设置为新位置的动画,可以使用:

[UIView animateWithDuration:2.0 animations:^{
  view.frame = finalPosition;
} completion:^(BOOL finished){
  // code to run when animation is done
}

参考:https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/UIView/UIView.html#//apple_ref/occ/clm/UIView/animateWithDuration:animations