ビデオをスクロールし続ける:Videoはビデオを持っている:覗くとポップ(3Dタッチ)した後、背景には、バグの
私はUITableViewCellsとの定期的なテーブルビューを持っています。メッセージのように見えます。私は別のビューコントローラOperationDetailsViewControllerを持っています。プレビューを表示するには
// need that dict for 3D touch
var dict_previwingControllers_cellIsKey = [UITableViewCell: UIViewControllerPreviewing]()
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// setup peek and pop (register proper view)
if traitCollection.forceTouchCapability == .available, let cellForChat = cell as? OperationsSingleCell {
let previewingController = registerForPreviewing(with: self, sourceView: cellForChat.viewTextBG)
dict_previwingControllers_cellIsKey[cell] = previewingController // remember because we need to unregister
}
}
func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// setup peek and pop (unregister)
if traitCollection.forceTouchCapability == .available {
if let previwingController = dict_previwingControllers_cellIsKey[cell] {
unregisterForPreviewing(withContext: previwingController)
}
}
}
ユーザーがメッセージの背景にタップしたときに、私は、この持っている:私はこれを持ってテーブルビューのデリゲートで
/// Create a previewing view controller to be shown at "Peek".
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
// Obtain cell by previewing context
guard let cell = (dict_previwingControllers_cellIsKey as NSDictionary).allKeys(for: previewingContext).first as? OperationsSingleCell else {return nil}
// guard let indexPath = tableViewMain.indexPathForRow(at: location),
// let cell = tableViewMain.cellForRow(at: indexPath) as? OperationsSingleCell else { return nil }
guard let operationDetailsVC = storyboard?.instantiateViewController(withIdentifier: "OperationDetailsVC") as? OperationDetailsVC else {return nil}
// custom properties
operationDetailsVC.dbOrder = cell.dbOrder
operationDetailsVC.navigationControllerOfParentVC = navigationController
// need to load view so we will know content size
operationDetailsVC.view.reloadInputViews()
let contentHeight = operationDetailsVC.scrollViewMain.contentSize.height
/*
Set the height of the preview by setting the preferred content size of the detail view controller.
Width should be zero, because it's not used in portrait.
*/
operationDetailsVC.preferredContentSize = CGSize(width: 0.0, height: contentHeight)
// Set the source rect to the cell frame, so surrounding elements are blurred.
previewingContext.sourceRect = cell.viewTextBG.bounds
return operationDetailsVC
}
/// Present the view controller for the "Pop" action.
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
// Reuse the "Peek" view controller for presentation.
show(viewControllerToCommit, sender: self)
}
をしかし、ユーザーが使用している場合、3Dタッチの背景には上のようにスクロールし続けますビデオ
iMessageアプリケーションでは起こりませんので、それは起こりません
あなたがテーブルビューにメッセージをタップしたときに、ジェスチャーrecognizorはテーブルビューにあります。あなたが指を離さなかったので、スワイプはテーブルビューによっても認識されます。指を離すと、3Dタッチビューが画面に表示されるので、テーブルビューはスワイプできません。 テーブルビューのスクロールを無効にすることができます。 – WeiJay
はい、テーブルビュー認識機能が現時点でアクティブなので、理解していますが、iMessageアプリケーションでそのようなことは起こりません。 –
willDisplayとtrueに設定するとtableviewをfalseに設定しようとすることができますWhen EndDisplay – WeiJay