У меня возникают проблемы с кругом, используя CAShapeLayer
. У меня есть пользовательский вид MainLogoAnimationView
код следующим образом:Позиция CAShapeLayer неверна
import UIKit
class MainLogoAnimationView: UIView {
@IBOutlet var customView: UIView!
var redCircle: AnimationCircleView!
// MARK: Object Lifecycle
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
_ = Bundle.main.loadNibNamed("MainLogoAnimationView", owner: self, options: nil)?[0] as! UIView
self.addSubview(customView)
customView.frame = self.bounds
let circleWidth = frame.size.width*0.25
let yPos = frame.size.height/2 - circleWidth/2
redCircle = AnimationCircleView(frame: CGRect(x: 10, y: yPos, width: circleWidth, height: circleWidth))
redCircle.backgroundColor = UIColor.yellow
addSubview(redCircle)
}
override func layoutSubviews() {
super.layoutSubviews()
}
}
В интерфейсе строитель я создал светло-голубой UIView
и выбран MainLogoAnimationView
как подвид.
AnimationCircleView
, как так:
import UIKit
class AnimationCircleView: UIView {
// MARK: Object lifecycle
var circleColor = UIColor.red.withAlphaComponent(0.5).cgColor {
didSet {
shapeLayer.fillColor = circleColor
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
let shapeLayer = CAShapeLayer()
func setup() {
let circlePath = UIBezierPath(ovalIn: frame)
shapeLayer.path = circlePath.cgPath
shapeLayer.fillColor = circleColor
shapeLayer.frame = self.frame
shapeLayer.backgroundColor = UIColor.gray.cgColor
layer.addSublayer(shapeLayer)
}
}
Скриншот:
Is кажется CAShapeLayer
кадра неверен, а также красный круг находится в неправильном положении. Он должен быть внутри желтого квадрата. Что я здесь делаю неправильно? Любые указатели были бы действительно оценены! Благодаря!
UPDATE:
Это переместило рамку в правильное положение, но круг не центрирован внутри. Изображение выше^ – KexAri
Да, я собирался спросить, что во мне редактируют. 'let circlePath = UIBezierPath (ovalIn: frame)', откуда вы получаете значение кадра? Если вы отлаживаете его, вы увидите, что позиции x и y снова смещены. Здесь тоже должны быть границы! Это то же самое, что я ответил в основном :) Попробуйте изменить его на границы, и он будет работать – Rikh
Это было! Благодаря! – KexAri