2016-03-11 19 views
7

'peek ve pop' uygulamasında donuyor Benim app peek ve pop uyguladı ve mükemmel çalışır. Ama sürekli 7-8 kez denemek için, uygulama peek görünümünde donuyor. Sahip olduğum tek seçenek, uygulamayı öldürmek ve tekrar çalıştırmak. Lütfen donma nedenini bilmeme izin verin. Projemde peek ve pop için aşağıdaki kodu kullanmış:App 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) 
} 

cevap

2

Bu şimdiye kadar onlardan hiçbir cevap ay önce Apple'da mühendis yanına yetiştirdim bir konudur. Görünüm hiyerarşisinde hata ayıkladığınızda, bir UITransitionView katmanının en üstteki görünüm olduğunu ve kaldırılmayacağını fark edeceksiniz. Uygulamanın donmasına neden olan şey bu. Aslında, uygulamanın işlevselliği donmuş değil - hala beklendiği gibi çalışıyor, ancak kullanıcı arayüzü "sıkışmış". İşte burada benim taş yığını üzerinde taşma: Force Touch animation freezes if gently touched

+0

xCode 9 GM ile aynı sorunu yaşıyorum ... Çift çağrılarım yok ... Hiç ek bilgi aldınız mı? – HixField

1

Bu hata için bir neden buldum.

Görünüm denetleyicinizin zorla dokunma önizlemesini desteklemesi gerekiyorsa, bunu yapmak için - (id <UIViewControllerPreviewing>)registerForPreviewingWithDelegate:(id<UIViewControllerPreviewingDelegate>)delegate sourceView:(UIView *)sourceView NS_AVAILABLE_IOS(9_0); yöntemini çağırarak bu vc'yi temsilci ile kaydetmeniz gerekir.

Aniden bu işlevi iki kez (süper sınıfın viewDidLoad(), bir kez alt vc'de iken) çağırıyorum ve bir kez alt vc'de kaldırdığımda bu hata düzeltildi! Şaşırtıcı ...

Bu hala bir Apple hatasıdır, çünkü bunun gerçekleşmesi için bir şey olmaz. Bununla birlikte, bu cevabı benimle aynı sorunu olan geliştiricilere yardımcı olabilir.

+0

Hata ile ilgili herhangi bir güncelleme var mı? –

+0

@UmarFarooque Bu işlevi çağırmak için bir kez silme, sorunumu giderdi. – kimimaro

1

Bu hata için başka bir olası neden buldum. Ben göstermek için bir görünüm denetleyicisi örneği viewControllerForLocation olarak

...

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

... ama bu ViewController onun viewDidAppear yanlış süper telefon geldi: Bu sorunu çözdükten sonra

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

herşey beklendiği gibi çalıştı.