Edited at

基本を理解するために(CGPoint,CGSize,CGRect,frame)

まずはじめにどうやって宣言されているかを確認しました。以下一覧

CGPoint


CGGeometry.h


public struct CGPoint {

public var x: CGFloat

public var y: CGFloat

public init()

public init(x: CGFloat, y: CGFloat)
}


CGSize


CGGeometry.h

public struct CGSize {

public var width: CGFloat

public var height: CGFloat

public init()

public init(width: CGFloat, height: CGFloat)
}


CGRect


CGGeometry.h

public struct CGRect {

public var origin: CGPoint

public var size: CGSize

public init()

public init(origin: CGPoint, size: CGSize)
}


frame


UIView.h

extension UIView {

// animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead.
open var frame: CGRect

// use bounds/center and not frame if non-identity transform. if bounds dimension is odd, center may be have fractional part
open var bounds: CGRect // default bounds is zero origin, frame size. animatable

open var center: CGPoint // center is center of frame. animatable

open var transform: CGAffineTransform // default is CGAffineTransformIdentity. animatable

@available(iOS 4.0, *)
open var contentScaleFactor: CGFloat

open var isMultipleTouchEnabled: Bool // default is NO

open var isExclusiveTouch: Bool // default is NO

open func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? // recursively calls -pointInside:withEvent:. point is in the receiver's coordinate system

open func point(inside point: CGPoint, with event: UIEvent?) -> Bool // default returns YES if point is in bounds

open func convert(_ point: CGPoint, to view: UIView?) -> CGPoint

open func convert(_ point: CGPoint, from view: UIView?) -> CGPoint

open func convert(_ rect: CGRect, to view: UIView?) -> CGRect

open func convert(_ rect: CGRect, from view: UIView?) -> CGRect

open var autoresizesSubviews: Bool // default is YES. if set, subviews are adjusted according to their autoresizingMask if self.bounds changes

open var autoresizingMask: UIViewAutoresizing // simple resize. default is UIViewAutoresizingNone

open func sizeThatFits(_ size: CGSize) -> CGSize // return 'best' size to fit given size. does not actually resize view. Default is return existing view size

open func sizeToFit() // calls sizeThatFits: with current view bounds and changes bounds size.
}


ここからわかったことframeもsizeのようにあるものだと思っていましたがそうではなかった。結果。

(CGPoint型, CGSize型, CGRect型)は宣言できるがframe型は存在しないframeはUIViewの作成を行う時にCGRectを入れておく変数名!

let point:CGPoint = CGPoint(x:0, y:0)

let size:CGSize = CGSize(width:100, height:100)

let cgrect:CGRect = CGRect(x:0, y:0, width:100, height:100 )
let cgrect1:CGRect = CGRect(origin: CGPoint(x:0, y:0),

let frame:CGRect = CGRect(x: 0, y: 0, width: 100, height: 100)
var myVeiw:UIView = UIView(frame: frame)

よって下のこの書き方は存在しない。なぜならframeは型としてというよりUIView作成時にCGRectの値を渡すための変数だから。

let frame:frame = frame(x: 0, y: 0, width: 100, height: 100)

そしてself.viewのxやwidthの取得の前にoriginやsizeをつかないとアクセスできないかがわかるという:turtle:

var x:CGFloat = self.view.bounds.origin.x

var y:CGFloat = self.view.bounds.origin.x
var width:CGFloat = self.view.bounds.size.width
var height:CGFloat = self.view.bounds.size.height

ここら辺をあやふやにやっていたので色々つまずいていたのかなと思いました。

もっと勉強しなくては!!:hatching_chick: