Создайте анимацию встряхивания для UIAlertView

Я пытаюсь сделать UIAlertView трясти. Я уже сделала alertView чтобы остаться на нажатие кнопки, но анимация встряхивания не работает. Вот что у меня есть:

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) {
        self.direction = 1;
        self.shakes = 0;
        [self shake:aUIView];
    }
}

-(void)shake:(UIAlertView *)theOneYouWannaShake
{
  [UIView animateWithDuration:0.03 animations:^ {
                                    theOneYouWannaShake.transform = CGAffineTransformMakeTranslation(5 * self.direction, 0);
                                  } 
                                  completion:^(BOOL finished) {
                                    if(self.shakes >= 10) {
                                      theOneYouWannaShake.transform = CGAffineTransformIdentity;
                                      return;
                                    }
                                    self.shakes++;
                                    self.direction = self.direction * -1;
                                    [self shake:theOneYouWannaShake];
                                  }];
}

Я пытался положить NSLog в - (void)shake... и я получил выход. Так что с моим кодом должно быть что-то не так, почему alertView не дрожит

2 ответа

Решение

Я создал иллюзию, из-за которой видимость оповещения кажется дрожащей. При условии, что вы должны установить параметры, в зависимости от того, насколько сильно должно дрожать изображение (включая экран на темном фоне).

Поскольку вы не можете изменять с помощью UIAlertView, перейдите к CGTranformations.

UIAlertView *dialog = [[UIAlertView alloc] initWithTitle:@"Title"
                                                 message:@"Message:"
                                                delegate:self cancelButtonTitle:@"Cancel"
                                       otherButtonTitles:@"Done", nil];

[dialog setAlertViewStyle:UIAlertViewStylePlainTextInput];
[dialog show];


UIView *dillusionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[dillusionView setBackgroundColor:[UIColor blackColor]];
[self.view addSubview:dillusionView];


[UIView animateKeyframesWithDuration:1.0 delay:0.0 options:UIViewKeyframeAnimationOptionAutoreverse | UIViewKeyframeAnimationOptionRepeat animations:^{
    [UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.5 animations:^{
        dialog.window.transform = CGAffineTransformTranslate(dialog.transform, dialog.frame.origin.x - 10, dialog.frame.origin.y);
    }];
    [UIView addKeyframeWithRelativeStartTime:0.5 relativeDuration:0.5 animations:^{
        dialog.window.transform = CGAffineTransformTranslate(dialog.transform, dialog.frame.origin.x + 10, dialog.frame.origin.y);
    }];
} completion:nil]; 

Я бы порекомендовал использовать пользовательский UIAlertView, а также несколько доступных библиотек с открытым исходным кодом.

Вы можете использовать UIKit Dynamics для анимированных эффектов в iOS. Вот учебник, который использует UIKit Dynamics для UIAlertView встряхнуть анимацию. Для получения дополнительной информации вы также можете обратиться к этому учебнику, который находится в быстрой.

Другие вопросы по тегам