2015-06-12 3 views
0

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

- (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 не трясет.

+0

Опять вам придется подкласс UIView ваш/AlertView или использовать этот https://github.com/lukestringer90/ShakingAlertView библиотека –

+0

@ user3693546 Я попробовал это, но это не сработало – Jessica

+0

Вы ссылающийся на весь экран встряхнуть или просто AlertView? –

ответ

0

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

Поскольку вы не можете изменять с помощью рамок 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, а также имеется несколько доступных библиотек-источников.

+0

Вы имеете в виду, что я должен сделать это с нуля, (из UIView)? – Jessica

3

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

Смежные вопросы