UIContainerViewを変更した後、タッチを受けて停止します。UIContainerViewは、ビューコントローラを表示するには、フレーム
は、今私は、ユーザーがこのコードのフルスクリーンボタンをタップすると、それをフルスクリーンにするために抱き合わせています:
@IBAction func fullscreen(_ sender: Any) {
view.goFullscreen()
}
extension CGAffineTransform {
static let ninetyDegreeRotation = CGAffineTransform(rotationAngle: CGFloat(Double.pi/2))
}
extension UIView {
var fullScreenAnimationDuration: TimeInterval {
return 0.15
}
func minimizeToFrame(_ frame: CGRect) {
UIView.animate(withDuration: fullScreenAnimationDuration) {
self.layer.setAffineTransform(.identity)
self.frame = frame
}
}
func goFullscreen() {
UIView.animate(withDuration: fullScreenAnimationDuration) {
self.layer.setAffineTransform(.ninetyDegreeRotation)
self.frame = UIScreen.main.bounds
}
}
}
ビューをフルスクリーンで表示するとうまくいきますが、ViewControllerがフルスクリーンの場合、ビューはタッチを停止します。これは、ビューコントローラに制約を追加するときに発生しますが、削除するとうまくいきます。なぜこれが起こり、どのように制約を設定して接触を受け取ることができますか?ここで
は、残念ながら、ジェスチャー認識装置は、トランスフォームを無視します。したがって、トランスフォームを手動でタッチポイントに適用する必要があります。これは、スーパービューにレコグナイザを適用し、ポイントに逆変換を適用し、ターゲットビューの境界内にあるかどうかをチェックするなど、これを行うためのさまざまな方法です。 –
@JoshHomannありがとう!あなたは私にいくつかのコードを教えてくれますか? –
私は電車に乗っています。私は帰宅するときにコードを追加します。基本的には、変換は実際の境界線ではなく画面上の見かけの位置にのみ影響します。そのため、実際にアニメーションのような一時的なものにトランスフォームを使用し、永続的なサイズ/位置の変更を行うために制約を使用する必要があります。この場合、ここでは、変換を使用する代わりにlayoutifneededを使用して制約の変更をアニメーション化することを検討します。 –