2015-03-07 1 views
2

Я пытаюсь создать круг, используя CGPoint и CGFloat. Но я хочу, чтобы круг отличался в зависимости от того, какое устройство используется. Я изменил все классы размера, чтобы отразить размеры, которые я хочу, и я надеялся, что это признает, но это не так.Как получить круг CAShapeLayer() для изменения размера в зависимости от класса размера

WhiteBar является UIView в моем главном экране, что я создал с помощью SB и, чтобы проверить, что мой взгляд изменяется в размерном классе, я поставил цвет фона и увидел его набор, как я хочу это

моей печать линии мне показывает наименьшую ширину и высоту

@IBOutlet var WhiteBar: UIView! 
var WhiteCircle = CAShapeLayer() 
WhiteCircle.strokeColor = UIColor.whiteColor().CGColor 
WhiteCircle.fillColor = UIColor.clearColor().CGColor 
WhiteCircle.lineWidth = 15 
WhiteCircle.strokeStart = 0 
WhiteCircle.strokeEnd = 1 

let WhiteCenterPoint = CGPoint (x: WhiteBar.bounds.width/2, y: WhiteBar.bounds.height/2) 
let WhiteCircleRadius : CGFloat = (WhiteBar.bounds.height/2 - WhiteCircle.lineWidth/2) 

println(WhiteBar.bounds.width) // outputs the smallest size of all my size classes 
println(WhiteBar.bounds.height) // outputs the smallest size of all my size classes 

var WhiteCirclePath = UIBezierPath(arcCenter: WhiteCenterPoint, radius: WhiteCircleRadius, startAngle: CGFloat(-0.5 * M_PI), endAngle: CGFloat(1.5 * M_PI), clockwise: true) 

WhiteCircle.path = WhiteCirclePath.CGPath 

WhiteBar.layoutIfNeeded() 

WhiteBar.layer.addSublayer(WhiteCircle) 

EDIT: кажется, размер устанавливается на основе ш: Любой час: Любой класс размера.

Заранее спасибо, Ace

+0

Где находится этот код, который вы разместили? – bjtitus

+0

В func TrackProgress(), который я вызываю в моем func viewDidLoad() –

+0

Возможный дубликат [размер прокрутки с помощью Autolayout: кадр 600x480 в компактном/любом размере, больше, чем iphone5?] (Http://stackoverflow.com/questions/28703078/scrollview-size-with-autolayout-frame-is-600x480-in-compact-any-size-class-big) – bjtitus

ответ

0

классы Размер (или любые изменения Автокомпоновка, в этом отношении) не применяются до тех пор, после viewDidAppear или viewDidLayoutSubviews. Вам нужно будет переместить этот код в один из них. Вы видите границы представления, поскольку он загружен из документа Interface Builder (xib или раскадровки). Вы никогда не должны проверять рамки или границы до тех пор, пока эти события жизненного цикла.

https://stackoverflow.com/a/28704658/72319

+0

Ха-ха, я прошел через ваш профиль и наткнулся на это сообщение уже :) Но мое удовольствие TrackProgress вызывается внутри моего viewDidLoad, так что это то же самое? –

+0

Да, viewDidLoad происходит первым из методов жизненного цикла. – bjtitus

+0

Значит, код должен быть в viewDidLoad? –

Смежные вопросы