2015-07-11 2 views
0

У меня есть настраиваемое событие перехода с моими контроллерами представлений, где будет представлен контроллер представления a (VC_A) (VC_B).Представление событий касания UIViewController, не регистрирующих

Теперь при выполнении перехода VC_A будет по-прежнему существовать, но VC_B не получит никаких событий касания. Теперь, если я удалю вид из VC_A, VC_B получит сенсорные события. Я не уверен, что мне не хватает в моем переходе, что говорит приложению отправлять все события касания на VC_B, а не на VC_A. Я попробовал установить первого ответчика, но это не сработало, если кто-то может сказать мне, что мне не хватает, было бы признательно.

// 
// AnimationController.swift 
// MarineWars 
// 
//  Created by Anthony Randazzo on 5/6/15. 
// Copyright (c) 2015 Anthony Randazzo. All rights reserved. 
// 

import Foundation 
import UIKit 


class TransitioningDelegate: NSObject, UIViewControllerTransitioningDelegate { 
func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return AnimationController(transitionType: .Presenting) 
} 

func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 
    return AnimationController(transitionType: .Dismissing) 
} 
func interactionControllerForDismissal(animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning? 
{ 
    return nil; 
} 
} 

private var inSuperView : UIView?; 
private var toSuperView : UIView?; 

class AnimationController: NSObject,  UIViewControllerAnimatedTransitioning { 

enum TransitionType { 
    case Presenting 
    case Dismissing 
} 

var animationTransitionOptions: UIViewAnimationOptions 
var inView : UIView?; 
var toView : UIView?; 
var fromView : UIView?; 

init(transitionType: TransitionType) { 
    switch transitionType { 
    case .Presenting: 
     animationTransitionOptions = .TransitionFlipFromLeft 
    case .Dismissing: 
     animationTransitionOptions = .TransitionFlipFromRight 
    } 

    super.init() 

} 

func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 
    inView = transitionContext.containerView() 
    toView = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)?.view // if iOS 8 only, I'd use `viewForKey`, instead 
    fromView = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)?.view 
    if(animationTransitionOptions == .TransitionFlipFromLeft) 
    { 
    NSTimer.scheduledTimerWithTimeInterval(transitionDuration(transitionContext)/2, target: self, selector: Selector("fireHalfwayIn"), userInfo: nil, repeats: false); 
    } 
    else if(animationTransitionOptions == .TransitionFlipFromRight) 
    { 
     NSTimer.scheduledTimerWithTimeInterval(transitionDuration(transitionContext)/2, target: self, selector: Selector("fireHalfwayOut"), userInfo: nil, repeats: false); 
    } 
    var scene = GameScene.instance; 
    scene!.paused = false; 
    scene!.view?.paused = false; 
    UIView.transitionFromView(fromView!, toView: toView!, duration: transitionDuration(transitionContext), options: animationTransitionOptions | .CurveEaseInOut | .AllowAnimatedContent) { finished in 

     transitionContext.completeTransition(true) 
     NSNotificationCenter.defaultCenter().postNotificationName("DropNotifications",object:nil); 

     //inSuperView is our parent 

     if(inSuperView == nil) 
     { 
      inSuperView = self.fromView; 
      println(self.fromView); 
      for view in self.fromView!.subviews 
      { 
       for subview in view.subviews 
       { 
        if(subview.isMemberOfClass(GameSceneView)) 
        { 
         self.fromView!.resignFirstResponder() 
         self.toView!.becomeFirstResponder(); 
         (subview as! GameSceneView).removeScene(); 
         return; 
        } 
       } 

       if(view.isMemberOfClass(GameSceneView)) 
       { 
        self.fromView!.resignFirstResponder() 
        self.toView!.becomeFirstResponder(); 
        (view as! GameSceneView).removeScene(); 
        return; 
       } 
      } 


     } 
     else 
     { 
      for view in self.toView!.subviews 
      { 
       for subview in view.subviews 
       { 
        if(subview.isMemberOfClass(GameSceneView)) 
        { 
         (subview as! GameSceneView).createScene(); 
         break; 
        } 
       } 
      } 
     } 

    } 
} 

func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { 
    return 1.0 
} 
func fireHalfwayIn() 
{ 
    //println("\nFire In\n"); 
    var scene = GameScene.instance; 
    //scene!.paused = false; 
    if(scene!.player.grid.parent != nil) 
    { 
     scene!.currentPlayer = scene!.enemy; 

     scene!.player.grid.removeFromParent(); 
     scene!.addChild(scene!.enemy.grid); 
     var player = scene!.currentPlayer; 



     player!.grid.position = GameScene.fixPositionOnScreen(CGPointMake(toView!.frame.width/2 - player!.gridSize.width/2, toView!.frame.height/2 - player!.gridSize.height/2),currentPlayer: player!); 

    } 
} 
func fireHalfwayOut() 
{ 
    // println("\nFire Out\n"); 
    var scene = GameScene.instance; 
    if(scene!.enemy.grid.parent != nil) 
    { 
     scene!.enemy.grid.removeFromParent(); 
     scene!.currentPlayer = scene!.player; 

     scene!.addChild(scene!.player.grid); 

    } 

} 

} 
+0

Вы можете разместить код для пользовательского перехода? Я помню, что у меня была аналогичная проблема, когда я не называл 'completeTransition (_ :)' в моем контексте перехода ('UIViewControllerContextTransitioning'). –

+0

ok Я немного почистил класс и разместил его, надеюсь, что это поможет. – Knight0fDragon

+0

http://stackoverflow.com/questions/22300050/touches-not-recognized-after-custom-transition - аналогичная проблема, но, конечно, этот ответ не является приемлемым для меня ответом, я предпочитаю, чтобы загрузка была загружена за то, что я делаю. – Knight0fDragon

ответ

0

ОК Я нашел эту проблему, мне нужно, чтобы добавить мнение к содержанию подвид

if(self.presenting) 
    { 
     self.inView!.addSubview(self.toView!); 
    } 

Это, конечно, приводит к ошибке, когда контекст завершается, удаление из поля зрения из ключа окно.

Так что мне нужно добавить эту строку после того, как контекст завершения:

UIApplication.sharedApplication().keyWindow!.addSubview(self.toView!); 

, чтобы заставить его работать правильно