tvOSでアプリを作っています。
画面A⇢B⇢Aと遷移すると、画面Aのself.viewの位置がスクリーンショットのようにずれて表示されてしまいます。
(初回起動時の画面Aの表示はずれません。)
確認のためself.view.backgroundColor
に色を付けているので、それも表示されていないということは画面に対してself.view自体がずれてしまっているのだと思います。
画面AのviewWillAppear
にself.view.frame.origin.x
とself.view.frame.origin.y
を確認できるよう仕込んだのですが、画面遷移前後ともに0.0でした。
self.view以外に、画面AにあるUIViewを調べましたが、正しい位置の座標が返ってきています。
ちなみに、画面AはUIViewControllerで、ソースは以下のとおりです。
class ViewController: UIViewController { var baseView: UIView = UIView()! var containerView1: UIView! = UIView()! var containerView2: UIView! = UIView()! override func viewDidLoad() { super.viewDidLoad() self.view.translatesAutoresizingMaskIntoConstraints = false self.baseView.translatesAutoresizingMaskIntoConstraints = false self.containerView1.translatesAutoresizingMaskIntoConstraints = false self.containerView2.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(self.bgView) self.bgView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true self.bgView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true self.bgView.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true self.bgView.heightAnchor.constraint(equalTo: self.view.heightAnchor).isActive = true self.baseView.addSubview(self.containerView1) self.containerView1.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true self.containerView1.leftAnchor.constraint(equalTo: self.baseView.leftAnchor).isActive = true self.containerView1.widthAnchor.constraint(equalToConstant: 500.0).isActive = true self.containerView1.heightAnchor.constraint(equalTo: self.baseView.heightAnchor).isActive = true self.baseView.addSubview(self.containerView2) self.containerView2.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true self.containerView2.leftAnchor.constraint(equalTo: self.baseView.leftAnchor, constant: 500.0).isActive = true self.containerView2.widthAnchor.constraint(equalToConstant: 1000.0).isActive = true self.containerView2.heightAnchor.constraint(equalTo: self.baseView.heightAnchor).isActive = true let asset = AVAsset(url: URL(string: "http://xxxxxxx.m3u8") let playerItem = AVPlayerItem(asset: asset) let player = AVPlayer(playerItem: playerItem) player.play() let movieLayer = AVPlayerLayer(player: player) moviewLayer.frame = view.bounes moviewLayer.videoGravity = .resizeAspectFill movieLayer.zPosition = -1 view.layer.insertSublayer(self.movieLayer, at: 0) } }
##追記
画面A⇢画面B⇢A①⇢B⇢A②
のように画面遷移を行ったとき、①のタイミングと②のタイミングで座標の値が異なることがわかりました。
②以降、B⇢Aと何回遷移を繰り返しても②と同じ座標が返ってきます。
// ①のときの各Viewの座標 self.view.frame (0.0, 0.0, 1920.0, 1080.0) self.view.bounds (0.0, 0.0, 1920.0, 1080.0) self.view.layer.frame (0.0, 0.0, 1920.0, 1080.0) self.view.layer.bounds (0.0, 0.0, 1920.0, 1080.0) self.baseView.frame (0.0, 0.0, 1920.0, 1080.0) self.baseView.bounds (0.0, 0.0, 1920.0, 1080.0) self.ContainerView1.frame (0.0, 0.0, 500.0, 1080.0) self.ContainerView1.bounds (0.0, 0.0, 500.0, 1080.0) self.ContainerView2.frame (500.0, 0.0, 1000.0, 1080.0) self.ContainerView2.bounds (0.0, 0.0, 1000.0, 1080.0) // ②のときの各Viewの座標 self.view.frame (-265.0, -162.0, 1920.0, 1080.0) self.view.bounds (0.0, 0.0, 1920.0, 1080.0) self.view.layer.frame (-265.0, -162.0, 1920.0, 1080.0) self.view.layer.bounds (0.0, 0.0, 1920.0, 1080.0) self.baseView.frame (0.0, 0.0, 1920.0, 1080.0) self.baseView.bounds (0.0, 0.0, 1920.0, 1080.0) self.ContainerView1.frame (0.0, 0.0, 500.0, 1080.0) self.ContainerView1.bounds (0.0, 0.0, 500.0, 1080.0) self.ContainerView2.frame (500.0, 0.0, 1000.0, 1080.0) self.ContainerView2.bounds (0.0, 0.0, 1000.0, 1080.0)
なぜこのようなことが起こってしまうのか、どう解決策を探したら良いのか検討もつきません。
〜の設定が悪いのではないか、〜がおかしいのではないか、など、何かアタリがつく方いましたら教えてください。
回答1件
あなたの回答
tips
プレビュー