Встряхните визуальный эффект на iPhone (не встряхивающий устройство)

Семантическое управление версиями имеет ряд рекомендаций и правил относительно того, как применять это (и когда). Очень просто следовать, и это просто работает.

http://semver.org/

44
задан Steven Fisher 27 October 2009 в 17:22
поделиться

3 ответа

Вот руководство, в котором подробно описано, как это сделать в Какао. Должно быть то же самое для iPhone (или, по крайней мере, очень похоже).

http://www.cimgf.com/2008/02/27/core-animation-tutorial-window-shake-effect/

8
ответ дан 26 November 2019 в 21:32
поделиться

Простое изменение координаты X свойства center вашего представления может помочь. Если вы еще не делали базовую анимацию, прежде чем она будет довольно простой.

Сначала начните анимацию справа, затем дождитесь ее завершения, а затем вернитесь влево и так далее. Уменьшение времени, чтобы оно "казалось правильным", может занять некоторое время.

- (void)animationFinishCallback:(NSString *)animationID finished:(BOOL)finished context:(void *)context
{
  if ([animationID isEqualToString:@"MoveRight"]) {
    [UIView beginAnimations:@"MoveLeft" context:NULL];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationDelay: UIViewAnimationCurveEaseIn];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationFinishCallback:finished:context:)];

    myView.center = CGRectMake(newX, newY);
    [UIView commitAnimations];
  }
}
6
ответ дан 26 November 2019 в 21:32
поделиться

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

- (void)earthquake:(UIView*)itemView
{
    CGFloat t = 2.0;

    CGAffineTransform leftQuake  = CGAffineTransformTranslate(CGAffineTransformIdentity, t, -t);
    CGAffineTransform rightQuake = CGAffineTransformTranslate(CGAffineTransformIdentity, -t, t);

    itemView.transform = leftQuake;  // starting point

    [UIView beginAnimations:@"earthquake" context:itemView];
    [UIView setAnimationRepeatAutoreverses:YES]; // important
    [UIView setAnimationRepeatCount:5];
    [UIView setAnimationDuration:0.07];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(earthquakeEnded:finished:context:)];

    itemView.transform = rightQuake; // end here & auto-reverse

    [UIView commitAnimations];
}

- (void)earthquakeEnded:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{
    if ([finished boolValue]) 
    {
        UIView* item = (UIView *)context;
        item.transform = CGAffineTransformIdentity;
    }
}
40
ответ дан 26 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: