2017-02-23 6 views
0

Ich habe eine UIImageView, die Sie tippen können und es zeichnet einen Kreis. Ich speichere den Ort der Kreise in einem Array von Wörterbüchern. Dadurch kann ich die Zeichnung der Kreise "wiederholen". Wenn die UIImageView jedoch eine andere Größe als das Original hat, werden die Kreise nicht auf die neue UIImageView skaliert.Wie skaliert man CAShapeLayer auf verschiedene UIImageView

Wie kann ich die Kreise skalieren? Zu Demonstrationszwecken ist das obere Bild die Größe der UIImageView, die für die Eingabe verwendet wird, und das zweite Bild ist die Größe für die Wiedergabe.

inputing die Kreise:

enter image description here

Replay die Kreise (die Kreise in der blauen UIImageView sein sollte

enter image description here

import Foundation 
import UIKit 

class DrawPuck { 

    func drawPuck(circle: CGPoint, circleColour: CGColor, circleSize: CGFloat, imageView: UIImageView) { 

     let circleBezierPath = UIBezierPath(arcCenter: CGPoint(x: circle.x,y: circle.y), radius: CGFloat(circleSize), startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true) 

     let shapeLayer = CAShapeLayer() 

     shapeLayer.path = circleBezierPath.cgPath 

     //change the fill color 
     shapeLayer.fillColor = circleColour 

     //you can change the stroke color 
     shapeLayer.strokeColor = UIColor.white.cgColor 

     //you can change the line width 
     shapeLayer.lineWidth = 0.5 

     imageView.layer.addSublayer(shapeLayer) 

    } 

} 

Antwort

0

ich in der Lage war, dies mit CATransform3DMakeScale Wie zu lösen Solange ich das ursprüngliche Seitenverhältnis des Originalbildes beibehalte, funktioniert es großartig.

let width = yellowImageView.frame.width/blueImageView.frame.width 
    let height = yellowImageView.frame.height/blueImageView.frame.height 

    shapeLayer.transform = CATransform3DMakeScale(height, width, 1.0) 

    view.layer.addSublayer(shapeLayer)