2012-04-27 4 views
1

коды очень просты:UIView анимация не работает

UIImageView *testView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)]; 
[self.view addSubview:testView]; 
[testView setImage:[UIImage imageNamed:@"button.png"]]; 
[UIView animateWithDuration:100 
       animations:^{testView.center = CGPointMake(140,350);} 
       completion:^(BOOL finished){NSLog(@"animation finished"); 
       } 
]; 

И как-то анимация просто не будет работать. Изображение отображается только в конечной позиции. Однако сообщение NSLog отображается.

Кто-нибудь знает, что может произойти с анимацией?

спасибо.

+0

Я не знаю, 100 сек предназначен. Убедитесь, что вы добавили button.png в свой проект. Я просто скопировал ваш код и протестировал с 10 секундами, и проблем не было. – HMHero

ответ

0
[self.view addSubview:testView]; 

после добавления subview..the UI не обновляются instantly..it занимает немного времени, чтобы refresh..However анимации называют прежде, чем это можно назвать update..so пользовательского интерфейса обновляется только после завершения анимации .. Я предлагаю позвонить [self.view setNeedsDisplay] перед анимацией .. или вызвать анимацию после небольшой задержки

+0

Спасибо, но я пробовал оба ваших совета (setNeedsDisplay и задержка анимации), но он по-прежнему не работает ... – ceriseche

0

Я не уверен, что вставленный код является вашей точной частью! Продолжительность анимации 100 сек. Это намеренное поведение?

Также попробуйте изменить рамку непосредственно вместо центра.

UIImageView *testView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)]; 
[self.view addSubview:testView]; 
[testView setImage:[UIImage imageNamed:@"button.png"]]; 
[UIView animateWithDuration:0.5 
       animations:^{testView.frame = CGRectMake(140,350,80,80);} 
       completion:^(BOOL finished){NSLog(@"animation finished"); 
       } 
]; 
+0

Я просто хочу добавить, что для документации Apple UIView анимация с использованием свойства рамок UIView будет не работает, если свойство преобразования не равно преобразованию идентичности. Значение по умолчанию преобразования - это преобразование идентичности. Когда свойство transform имеет другое значение, необходимо анимировать его с помощью свойств центра и границ. – bneely

0

У вас не хватает несколько строк в коде анимации.

[UIView animateWithDuration:100 
    delay:0 
    options:UIViewAnimationOptionAllowAnimatedContent 
    animations:^{ 
     testView.center = CGPointMake(140,350); 
    } completion:^(BOOL finished){NSLog(@"animation finished")} 
]; 

Эти анимации являются уникальными для iOS 7 только, и гораздо лучшее решение, чем то, что вы в качестве примеров выше.

Возможно, вы давно уже ответили на это, но я надеюсь, что этот ответ поможет любому другому, кто наткнулся на этот ответ.

0

Ни один из представленных здесь решений не работает, потому что он, вероятно, называет его код вращения в неправильном месте в коде.

называют его здесь, и он будет работать

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:YES]; 

} 
0

Добавить рамки QuartzCore:

#import <QuartzCore/QuartzCore.h>