2016-03-11 4 views
7

Я внедрил peek и pop в своем приложении, и он отлично работает. Но при непрерывном пробовании в 7-8 раз приложение зависает от просмотра. Единственный вариант, который у меня есть, - это убить приложение и снова запустить его. Пожалуйста, дайте мне знать причину замораживания. Я использовал следующий код для заглядывать и поп-музыки в моем проекте:Приложение замерзает в реализации «peek and pop» в iPhone 6s

var isPresentedBy3Dtouch: Bool = false 
var passedDetails:DetailModel! 

func previewingContext(previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { 

    guard let indexPath = tableView?.indexPathForRowAtPoint(location) 
    else { return nil } 

    guard let cell = tableView?.cellForRowAtIndexPath(indexPath) 
    else { return nil } 

    guard let detailViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Navigation") as? UINavigationController 
    else { return nil } 

    (detailViewController.topViewController as! DetailViewController).passedDetails = self.customerLists[indexPath.row] 
    (detailViewController.topViewController as! DetailViewController).isPresentedBy3Dtouch = true 
    detailVC.preferredContentSize = CGSize(width: 0.0, height: 480.0) 
    previewingContext.sourceRect = cell.frame 
    return detailVC 
} 

func previewingContext(previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit :UIViewController) { 
    showViewController(viewControllerToCommit, sender: self) 
} 

ответ

2

Это вопрос, я воспитан к инженерам более в компании Apple месяцев назад без ответа от них до сих пор. Если вы отлаживаете иерархию представлений, вы заметите, что уровень UITransitionView является самым верхним видом, и он не удаляется. Это то, что заставляет приложение замораживать. Фактически, функциональность приложения не заморожена - она ​​по-прежнему работает так, как ожидалось, но пользовательский интерфейс «застрял». Вот мой первоначальный пост здесь, на переполнение стека: Force Touch animation freezes if gently touched

+0

У меня такая же проблема с xCode 9 GM ... У меня нет двойных звонков ... вы когда-нибудь получали дополнительную информацию? – HixField

1

Я нашел причину этой ошибки.

Если вашему контроллеру просмотра необходимо поддерживать предварительный просмотр касания силы, вам необходимо зарегистрировать этот vc с делегатом, вызвав метод - (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate:(id<UIViewControllerPreviewingDelegate>)delegate sourceView:(UIView *)sourceView NS_AVAILABLE_IOS(9_0); для этого.

Я просто внезапно вызываю эту функцию дважды (один раз в суперклассе viewDidLoad(), один раз в sub vc), а когда я удаляю один раз в своем sub vc, эта ошибка исправлена! Удивительно ...

Это все еще ошибка Apple, поскольку это не имеет никакого значения для этого. Однако, желаю, чтобы этот ответ помог разработчикам, у которых такая же проблема со мной.

+0

любые обновления по ошибке? –

+0

@UmarFarooque Удалить одно время для вызова этой функции, исправил мою проблему. – kimimaro

1

Я нашел еще одну возможную причину этой ошибки.

В viewControllerForLocation я реализованным на контроллер представления, чтобы показать ...

func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { 
    let vc = VCImageFullScreen.loadView() 
    return vc 
} 

... но это ViewController было неправильно супер вызов в его viewDidAppear:

class VCImageFullScreen : UIViewController { 
     override func viewDidAppear(_ animated: Bool) { 
      super.viewWillAppear(animated) 
      //BUG --> should be super.view**Did**Appear(animated) 
      ... 
     } 
    } 

После исправления этой проблемы все работало, как ожидалось.

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