Анимация в меню, как Angry Birds или Tiny Wings - PullRequest
0 голосов
/ 21 июля 2011

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

1 Ответ

2 голосов
/ 22 июля 2011

Не знаком ни с одним приложением (да, с игровым Ludite), но если вы сделаете вид шире экрана, вы можете переместить его местоположение / центр / рамку / преобразование / и т.д. чтобы заставить его двигаться, вы также можете оживить это действие.

если вы сделаете первые 320 точек (мы измеряем в точках, а не в пикселях) ширины вида равными последним 320 точкам, вы можете изменить положение вида, когда оно достигнет конца, и продолжать движение навсегда.


Редактировать (пример кода):

- (void)animateBannerLocation {
  UIView *view = _bannerView; // _bannerView.frame = CGRectMake(0,0,1000 ish,40);
  CGRect startRect = view.frame;
  CGRect destinationRect = view.frame;
  // assuming superview is width of screen
  destinationRect.origin.x = CGRectGetWidth(view.frame) - CGRectGetWidth(view.superview.frame);
  [UIView animateWithDuration:6.0 // time in seconds
                   animations:^(void) {
                     view.frame = destinationRect;
                   } completion:^(BOOL finished) {
                     /** if you want it to scroll forever:
                     view.frame = startRect;
                     [self animateBannerLocation];
                      **/
                   }];
}

непроверенных


Редактировать # 2 также не проверено

- (void)viewDidLoad {
  [super viewDidLoad];
  UIImageView *_bannerView; /// - an ivar
  // not the best way to load an image you only use in one place:
  UIImage *image = [UIImage imageNamed:@"SomeBigBannerImage1000x40ish.png"];
  _bannerView = [[UIImageView alloc] initWithImage:image];
  [self.view addSubview:_bannerView];
}

Редактировать # 3

Пересмотрел ваш код. Обратите внимание на предупреждения компилятора.

- (void)animateBannerLocation {
  UIView *view = _bannerView; // _bannerView.frame = CGRectMake(0,0,1000 ish,40);
  CGRect startRect = view.frame;
  CGRect destinationRect = view.frame;
  // assuming superview is width of screen
  destinationRect.origin.x = - (CGRectGetWidth(view.frame) - CGRectGetWidth(view.superview.frame));
  [UIView animateWithDuration:6.0 
                        delay:0.0 
                      options:UIViewAnimationOptionCurveLinear
                   animations:^(void) {
                     view.frame = destinationRect;
                   } completion:^(BOOL finished) {
                     view.frame = startRect;
                     if (stopAnimation == NO)
                       [self animateBannerLocation];
                   }];

}


- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [self animateBannerLocation];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...