こんなView2つを、画面の縦横に合わせて長辺を2等分して表示させる処理を実装します。
Auto Layoutさせない
いくらプログラムでいじってもAuto LayoutがONになってたらそっちが勝ってしまうので、
Use Auto Layoutのチェックを外します。
スクリーンサイズによってViewのRectを変更する
こんな関数を用意します。
func resizeView(screenSize: CGSize) {
var newView1Rect:CGRect
var newView2Rect:CGRect
if (screenSize.width > screenSize.height) {
newView1Rect = CGRectMake(0, 0, screenSize.width / 2, screenSize.height)
newView2Rect = CGRectMake(screenSize.width / 2, 0, screenSize.width / 2, screenSize.height)
} else {
newView1Rect = CGRectMake(0, 0, screenSize.width, screenSize.height / 2)
newView2Rect = CGRectMake(0, screenSize.height / 2, screenSize.width, screenSize.height / 2)
}
View1.frame = newView1Rect
View2.frame = newView2Rect
}
で、Viewの初期表示時と画面向き変更時にそれを呼び出します。
override func viewWillAppear(animated: Bool) {
resizeView(UIScreen.mainScreen().bounds.size)
}
override func willRotateToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
let screenSize: CGSize = UIScreen.mainScreen().bounds.size
var newScreenSize:CGSize;
if ((toInterfaceOrientation.isLandscape && screenSize.width < screenSize.height) || (toInterfaceOrientation.isPortrait && screenSize.width > screenSize.height)) {
newScreenSize = CGSizeMake(screenSize.height, screenSize.width)
} else {
newScreenSize = CGSizeMake(screenSize.width, screenSize.height)
}
resizeView(newScreenSize)
}
画面向き変更時の処理はスクリーンの縦横を入れ替えて処理しますが、
180度回転するような場合もあるので、toInterfaceOrientationで向きを把握してメソッドに渡すRectを調整するか判断します。
これで横にしても長辺でViewが分割されます。




コメント