Встряхните UIView … но используя UIKit Dynamics

Есть много ситуаций, когда вам нужно «встряхнуть» UIView.

(Например, «обратить внимание дочернего пользователя на элемент управления», «соединение медленное», «пользователь вводит неверный ввод» и т. Д.).

Можно ли это сделать с помощью UIKit Dynamics?

Так что вам придется …

  • взгляните, скажем, на 0,0

  • добавить концепцию весны

  • дайте ему толчок, скажите «левой»,

  • он должен откидываться назад и вперед на пружину, в конечном итоге снова оседая на 0,0

Это возможно? Я не смог найти пример в демонстрациях Apple. ура

Обратите внимание, что как Нильс объясняет ниже, весна не обязательно является «физическим чувством», которое вы хотите для некоторых из этих ситуаций: в других ситуациях это может быть идеально. Насколько мне известно, вся физика в собственных приложениях iOS (например, Messages и т. Д.) Теперь использует UIKit Dynamics, поэтому для меня стоит иметь дескриптор «UIView bouncing on a spring».


Чтобы быть понятным, конечно, вы можете сделать что-то «похожее», просто с анимацией. Пример…

Но это просто не имеет того же «физического ощущения», что и остальная часть iOS.

-(void)userInputErrorShake { [CATransaction begin]; CAKeyframeAnimation * anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; anim.values = @[ [NSValue valueWithCATransform3D: CATransform3DMakeTranslation(-4.0f, 0.0f, 0.0f) ], [NSValue valueWithCATransform3D: CATransform3DMakeTranslation(4.0f, 0.0f, 0.0f) ] ]; anim.autoreverses = YES; anim.repeatCount = 1.0f; anim.duration = 0.1f; [CATransaction setCompletionBlock:^{}]; [self.layer addAnimation:anim forKey:nil]; [CATransaction commit]; } 

One Solution collect form web for “Встряхните UIView … но используя UIKit Dynamics”

Если вы хотите использовать UIKit Dynamics, вы можете:

  • Сначала определите управляющий аниматор:

     @property (nonatomic, strong) UIDynamicAnimator *animator; 

    И создайте экземпляр:

     self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 
  • Во-вторых, добавьте поведение приложения в этот аниматор для просмотра в текущем местоположении. Это заставит его вернуться назад, когда будет сделано нажатие. Вам придется играть с damping и значениями frequency .

     UIAttachmentBehavior *attachment = [[UIAttachmentBehavior alloc] initWithItem:viewToShake attachedToAnchor:viewToShake.center]; attachment.damping = 0.5; attachment.frequency = 5.0; [self.animator addBehavior:attachment]; 

    Эти значения не совсем правильные, но, возможно, это отправная точка в ваших экспериментах.

  • Примените поведение push ( UIPushBehaviorModeInstantaneous ), чтобы UIPushBehaviorModeInstantaneous его. После этого поведение привязки приведет к его возврату назад.

     UIPushBehavior *push = [[UIPushBehavior alloc] initWithItems:@[viewToShake] mode:UIPushBehaviorModeInstantaneous]; push.pushDirection = CGVectorMake(100, 0); [self.animator addBehavior:push]; 

Лично я не сумасшедший об этой конкретной анимации (затухающая кривая мне не подходит). Я бы склонялся к использованию блочной анимации, чтобы переместить ее в одном направлении (с UIViewAnimationOptionCurveEaseOut ), по завершении инициируйте другую, чтобы переместить ее в противоположном направлении (с UIViewAnimationOptionCurveEaseInOut ), а затем по завершении этого используйте использование использования usingSpringWithDamping для animateWithDuration для перемещения он возвращается в свое первоначальное место. ИМХО, что дает кривую, которая больше похожа на «трястись, если ошибается».

  • Внедрение UIKitDynamics для перетаскивания изображения с экрана
  • UICollectionView для самостоятельной калибровки на iOS 8 будет сбой с UIDynamic flowLayout и повторением вызова _updateVisibleCellsNow
  • CollectionView + UIKit Динамика сбой на performBatchUpdates:
  • UICollectionView. Динамика UIKit Dynamics «падает» с SAME DYNAMICS в виде коллекции
  • Пользовательское UIDynamicBehavior: как узнать общее количество шагов / тиков анимации?
  • Резиновая кнопка с динамикой UIKit
  • Динамика UIKit на UITableView
  • Репликация сообщений iOS7 Сообщения UIKitDynamics с CollectionView
  • Анимировать автоматический макет с использованием UIKitDynamics
  • Динамика UIKit Dynamics «SolveVelocityConstraints»
  • Экран выбора жанра Apple Music
  • Interesting Posts

    iOS – UIScrollView не обновляет свой контент, а некоторые UIView исчезают после перезагрузки

    Измените текст UIAlertView при записи видео с помощью UIImagePickerController и достигните videoMaximumDuration

    Worklight 6.1 «доступ к защищенным службам запрещен» после того, как приложение развернуто в App Store

    Две ограничения запроса на один ключ с помощью Parse and Swift

    Очень медленная рендеринг HTML в NSAttributedString на iOS 10.2.1

    iOS5, StoryBoards, ARC: проблема со странными категориями

    Google Pick Picker (JavaScript) не поддерживает мобильный / отзывчивый

    Не удается открыть xib в навигаторе проекта

    iOS9: пользовательский интерфейс UIWindow отключает отображение строки состояния

    Пулы Autorelease в Objective-C – освобождают основной AutoreleasePool?

    Создание GPX-файла из массива CLLocation

    Firebase Phone auth не может получить регистрацию удаленных уведомлений

    С какими устройствами работает XCode 4.5?

    Быстрое преобразование Фурье на GPU на iOS

    Xcode 6.4 Игровая площадка Исключительно высокая загрузка процессора

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.