2010-12-30 3 views

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

hierfür benötigen Sie Quartz Rahmen in das Projekt einzubeziehen – samfisher

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() 
    } 
} 

The rectangle is rotated by 45 degrees.

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) 
     } 
    }