Wie kann ich Objekte wie ein Rechteck oder einen Kreis in Kerngrafiken drehen? und ist es möglich, dies mit Core Animation zu tun?iOS SDK Core Graphics Spielobjekt Rotation?
0
A
Antwort
0
Versuchen Sie, die transform-Eigenschaft der Ansicht (die animierbar ist) zu setzen oder verwenden Sie CGAffineTransformMakeRotation, um eine Transformation zu erstellen, die Sie beim Zeichnen auf Ihren Kontext anwenden können.
0
extension Double {
var degreesToRadians: CGFloat {
return CGFloat(self) * CGFloat(M_PI)/CGFloat(180.0)
}
}
class Rectangle: UIView {
override func draw(_ rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
let path = UIBezierPath(rect: rect.insetBy(dx: 90, dy: 100))
context?.translateBy(x: rect.midX, y: -100)
context?.rotate(by: 45.0.degreesToRadians)
context?.setStrokeColor(UIColor.green.cgColor)
context?.setLineWidth(5.0)
context?.addPath(path.cgPath)
context?.strokePath()
}
}
Animation hinzufügen
class Rectangle: UIView {
override func draw(_ rect: CGRect) {
let path = UIBezierPath(rect: rect.insetBy(dx: 90, dy: 100))
// Add shape layer
let rectangle = CAShapeLayer()
rectangle.frame = bounds
rectangle.path = path.cgPath
rectangle.strokeColor = UIColor.yellow.cgColor
layer.addSublayer(rectangle)
// create transform
let transform = CATransform3DMakeRotation(90.0.degreesToRadians, 0, 0, 1)
// Animate the transform
let anim = CABasicAnimation(keyPath: "transform.rotation.z")
anim.fromValue = CATransform3DIdentity
anim.toValue = transform
anim.duration = 2.0
anim.repeatCount = Float.infinity
layer.add(anim, forKey: nil)
}
}
hierfür benötigen Sie Quartz Rahmen in das Projekt einzubeziehen – samfisher