Переместить объекты в цикле в target-c?
Я пытаюсь переместить 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 ответа
Потому что пока вы обновляете свой кадр в цикле, экран не обновляется. 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;
}
посмотри, что такое Main Event Loop
Я не уверен, что я действительно понимаю ваш вопрос. Если вы хотите переместить цикл в течение определенного периода времени и определенной репутации, почему бы вам не написать метод, который оживляет ваш 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)];
}
}];
}
Это будет перемещать ваш взгляд каждый раз 20,0 по оси Y.
Если вы хотите анимировать вид в новую позицию, вы можете использовать:
[UIView animateWithDuration:2.0 animations:^{
view.frame = finalPosition;
} completion:^(BOOL finished){
// code to run when animation is done
}