UIScrollViewのcontentoffsetをcontentsizeの中心へ

説明

これは完全に自分の作業内容を記録しておくためだけの記事です。スクロールビューに平行にアドサブビューされた正四角形がいくつかあったとして、スクロールビューのコンテンツサイズをのちょうど中心を、コンテンツオフセットの初期位置にするというコードです。下記のロジックでそれが実装できます

//コンテンツオフセット = (コンテンツサイズを2で割った値 - セルフのビューの横幅/2)
scrollview.contentOffset = CGPoint(x: sizeview/2 - self.view.frame.width/2, y: 0)

実装

import UIKit

class ViewController: UIViewController {

    var scrollview = UIScrollView()
    var View = UIView()
    var View2 = UIView()
    var View3 = UIView()
    var View4 = UIView()
    var View5 = UIView()


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let viewX = self.view.frame.width
        let viewY = self.view.frame.height


        scrollview.frame = CGRect(x:0, y:0, width:viewX , height:viewY/2)
        scrollview.backgroundColor = UIColor.red


        self.view.addSubview(scrollview)


        View.frame = CGRect(x:0, y:0, width:300 , height:300)
        View.backgroundColor = UIColor.black
        //View.layer.borderWidth = 1.0
        scrollview.addSubview(View)

        View2.frame = CGRect(x:300, y:0, width:300 , height:300)
        View2.backgroundColor = UIColor.green
        //View2.layer.borderWidth = 1.0
        scrollview.addSubview(View2)

        View3.frame = CGRect(x:600, y:0, width:300 , height:300)
        View3.backgroundColor = UIColor.orange
        //View2.layer.borderWidth = 1.0
        scrollview.addSubview(View3)

        View4.frame = CGRect(x:900, y:0, width:300 , height:300)
        View4.backgroundColor = UIColor.purple
        //View4.layer.borderWidth = 1.0
        scrollview.addSubview(View4)

        View5.frame = CGRect(x:1200, y:0, width:300 , height:300)
        View5.backgroundColor = UIColor.gray
        //View5.layer.borderWidth = 1.0
        scrollview.addSubview(View5)

        let sizeview = View.frame.width + View2.frame.width + View3.frame.width + View4.frame.width + View5.frame.width//1500

        scrollview.contentSize = CGSize(width:sizeview , height:viewY/2)

        if(view.frame.width > scrollview.contentSize.width){
            print("true")
            var transTrans = CGAffineTransform()
            transTrans = CGAffineTransform(translationX: 50, y: 0)
            View.transform = transTrans
        }else{
            print("false")
            scrollview.contentOffset = CGPoint(x: sizeview/2 - self.view.frame.width/2, y: 0)

        }

    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

Screen Shot 2018-01-12 at 23.04.59.png