2016-09-18 4 views
2

自分のアプリケーションで3Dビューを実装しました。ビューコントローラをソースビューとしてテーブルビューに登録しました。そして、私はそれを実装して以来、過去数週間は正常に動作しています。3D Touch View Controllerが呼び出されていない

しかし、私はそれを試したところ、もはや動作していないように見えました。私はそのコードのどれにも触れなかったので、何が問題なのか分かりません。

ビューコントローラが確実にUIViewControllerPreviewingに登録されていますが、previewingContext(previewingContext: viewControllerForLocation:)は呼び出されていません。

これをプレビューのために登録とは別に設定する必要があるかどうかわかりません。その方法をトリガーするものは何もありません。私は3Dタッチがうまく動作しているように見える別のビューコントローラを持っていますが、私は別のことをやっていません。

誰かが、なぜメソッドが呼び出されていないのかについてのアイデアはありますか?以前はうまく働いていたので、仕事が止まったように見えるので、これは本当にイライラしています。ありがとう。ここで

は私のpreviewingContext(previewingContext: viewControllerForLocation:)メソッドのコードされています

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

    let identifier = "ClipPlayerViewController" 

    guard let indexPath = tableView.indexPathForRowAtPoint(location), let destination = storyboard?.instantiateViewControllerWithIdentifier(identifier) as? ClipPlayerViewController else { return nil } 

    let effect = filteredEffectsSortedBySection[indexPath.section].effects[indexPath.row] 

    switch effect.mediaType { 
    case .Video: 
     destination.effect = effect 

     destination.showsPlaybackControls = false 

     if let thumbnail = thumbnailsForEffects[effect], let unwrappedThumbnail = thumbnail { 
      destination.preferredContentSize = CGSizeMake(unwrappedThumbnail.size.width - 2, unwrappedThumbnail.size.height - 2) 
     } else if let effectSize = destination.player?.currentItem?.asset.tracksWithMediaType(AVMediaTypeVideo).first?.naturalSize { 
      destination.preferredContentSize = effectSize 
     } 

     previewingContext.sourceRect = tableView.cellForRowAtIndexPath(indexPath)!.frame 

     return destination 

    case .Texture: 
     return nytPhotosViewControllerForEffectAtIndexPath(indexPath) 
    } 
} 

そして、ここではviewDidLoad()に呼び出され、私はプレビューするための登録コードは、次のとおりです。あなたはSwift3に

if traitCollection.forceTouchCapability == .Available {   
    registerForPreviewingWithDelegate(self, sourceView: tableView) 
} 

答えて

0

をアップグレードしましたか?はいの場合、デリゲート関数のparamsが一致しているかどうかを確認します。

また、registerForPreviewingが正しく呼び出されていることを確認してください。

registerForPreviewing(with: self as! UIViewControllerPreviewingDelegate, sourceView: view) 
+0

ありがとうございますが、私はまだそのプロジェクトのSwift 3に更新していません(まだこれに関する問題は何も分かっていません) – CompC

+0

ああ。あなたがviewControllerForLocationデリゲート関数を共有している場合は、私のバージョンが動作しているかどうか確認できます。 –

+0

元の投稿に自分のコードを追加しました。 – CompC

0

Swift 3マイグレータを実行します。 (Edit> Convert> Current Swift Syntaxへ)

Swift 3コンパイラをまだ使用しているようです.With Swift 2の場合、作業中のメソッド呼び出し(とtableView.cellForRow(at:)など)はコンパイルに失敗し、これはそれらのAPIのSwift 3の構文であるためです。

移行では、それをキャッチするために失敗した場合、あなたのデリゲートメソッドのスウィフト3メソッドシグネチャがpreviewingContext(_:viewControllerForLocation:)である - ので、あなたの宣言は次のようになります、最初のパラメータには、引数のラベルがありませんことを示すアンダースコアに注意してください。

func previewingContext(_ previewingContext: UIViewControllerPreviewing, 
    viewControllerForLocation location: CGPoint) -> UIViewController? 
+0

あなたはそうです。それは私がSwift 3にアップデートしようとした古いバージョンからのものでしたが、使用していたCocoaPodのいくつかの問題がありました。実際にビルドされるプロジェクトのバージョンはSwift 2.3です。元の投稿を更新して、実際に現在使用しているコードを表示しました(Swift 2.3 - まだ移行してもポッドに問題があります) – CompC

関連する問題