我试图在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的那条线,所以我认为它是我问题中唯一相关的线。
答案 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;
}
查看什么是主要事件循环
答案 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
}