我想绘制一个UIView图层但是当我这样做时,图层框架与UIView框架不相等(在预览中).
class ViewController: UIViewController { var graphHeight:CGFloat = 100 var graphSize:CGFloat! override func viewDidLoad() { super.viewDidLoad() graphSize = self.view.frame.height/CGFloat(M_PI) let graphRect:CGRect = CGRectMake(0, graphHeight, self.view.frame.width, graphSize) let background = blueGardient() var theView:UIView = UIView(frame: graphRect) background.frame = theView.frame theView.backgroundColor = UIColor.yellowColor() theView.layer.cornerRadius = 8 theView.layer.borderWidth = 1 theView.layer.borderColor = UIColor.redColor().CGColor theView.layer.insertSublayer(background, atIndex: 0) self.view.addSubview(theView) } func blueGardient()->CAGradientLayer{ let topColor = UIColor(red: 0, green: 0, blue: 255, alpha: 0.7) let bottomColor = UIColor(red: 0, green: 0, blue: 255, alpha: 0.9) let gradientColors: [CGColor] = [topColor.CGColor, bottomColor.CGColor] let gradientLocations: [Float] = [0.0, 1.0] let gradientLayer: CAGradientLayer = CAGradientLayer() gradientLayer.colors = gradientColors gradientLayer.locations = gradientLocations return gradientLayer } }
框架是平等的
(0.0,100.0,320.0,180.800015352393) (0.0,100.0,320.0,180.800015352393)
但没有显示eauql.我尝试使用theView.layer.frame但未成功...
问题是因为每个帧的上下文不同.您的视图框架(theView.frame
)位于其超视图的上下文中,因此(0,100)原点意味着它从屏幕的左上角向下偏移100个点.图层的frame(background.frame
)位于它所属的视图的上下文中(theView
),因此相同的(0,100)原点意味着蓝色图层从视图的左上角偏移了100个点.
而不是使用视图,使用视图的frame
大小bounds
和(0,0)原点创建一个新的rect :
background.frame = CGRect(origin: CGPointZero, size: theView.bounds.size)