2016-05-19 3 views
2

Я пытаюсь показать пользовательский вид, когда получаю уведомление от синтаксического анализа. Этот вид показан с анимацией и скрыт с другой анимацией. В этом представлении также есть uitapgesturerecognizer, который должен быть запущен, когда пользователь удаляет представление. Моя проблема заключается в том, что при запуске второй анимации неуправляемое пользовательское представление не работает: \Разрешить UITapGestureRecognizer внутри UIAnimations

Любые идеи? Я вставляю код. Спасибо!

func doManageObjectNotification(notification: COPushNotification){ 
    mainView = UIApplication.sharedApplication().keyWindow! 
    customView = CustomNotificationView() 
    let height = customView.calculateViewHeight() 

    customView.frame = CGRectMake(0, -height, mainView.frame.width, height) 
    customView.targetMethod = notificationWasTapped 
    customView.setContent(notification) 
    customView.alpha = 0 
    mainView.addSubview(customView) 

    UIView.animateWithDuration(0.75, delay: 0, options: [UIViewAnimationOptions.CurveEaseInOut, UIViewAnimationOptions.AllowUserInteraction], animations: {() -> Void in 
     // Show the view 
     self.customView.frame.origin.y = 0 
     self.customView.alpha = 1 
    }) { (Bool) -> Void in 
     UIView.animateWithDuration(0.75, delay: 5, options: [UIViewAnimationOptions.CurveEaseInOut, UIViewAnimationOptions.AllowUserInteraction], animations: { 
      // Hide the view 
      self.customView.alpha = 0 
      }, completion: { finished in 
       self.customView.removeFromSuperview() 
       self.customView = nil 
     }) 
    } 

} 

ответ

1

Для обработки крана во время анимации вы должны реализовать метод touchesBegan. благодаря этому вы можете обнаружить прикосновение, а затем проверить, что прикосновение от вашего вида, если да, то вы можете выполнить свою желаемую задачу.

Надеется, что это поможет :)

+0

Большое вам спасибо Lion для вас ответ. Я понял, что проблема заключается в инструкции customView.alpha = 0, которая сообщает ui, что это представление невидимо, поэтому автоматически все события касания отменены. Мое решение состояло в том, чтобы поместить customView.alpha = 0,1, и когда анимация закончилась, удалите представление из супервизора. После этого начались жест и прикосновения (как вы сказали);) –

2

Im согласны с Lion ответом, но я хочу также обратить ваше внимание о во время анимации: если вы используете autolayout и вы пытаетесь изменить размеры рамки или позиции вместо правильных связанные ограничения, вы можете отключить эффект ограничений, вызывающий предупреждения и неожиданные размеры и движения. Когда у вас есть эта проблема много раз, UITapGestureRecognizer перестает отвечать.

Лучший способ сделать это состоит в создании IBOutlets ограничений и работа с ним (например):

@IBOutlet weak var customViewTopConstraint: NSLayoutConstraint 

... 
UIView.animateWithDuration(0.75, delay: 0, options: [UIViewAnimationOptions.CurveEaseInOut, UIViewAnimationOptions.AllowUserInteraction], animations: {() -> Void in 
     // Show the view 
     self.customViewTopConstraint.constant = 0 
+1

Благодарим вас за отзыв Алессандро. Я посмотрю на это;) –