2014-11-07 6 views
9

Ich muss eine unregelmäßige Form markieren, wenn der Benutzer darauf tippt. Meine Idee war, ein Polygon zu zeichnen, das der Form entspricht, es mit einer Farbe zu füllen und die Deckkraft so zu verändern, dass sie durchsichtig wird. Leider kann ich dazu nichts finden. Im Wesentlichen möchte ich das gefüllte Polygon zeichnen, es auf meiner Karte überlagern und dann in der Lage sein, es zu schließen (oder zu verbergen). Wie kann ich das erreichen?Zeichnen von Polygonen in Swift

+0

diesen Mac App finden Sie in Objective C geschrieben Sie könnten eine Idee davon bekommen. – Sandeep

+0

Sie können die Form entweder in drawRect: (mit UIBezierPath) zeichnen oder eine Ansicht erstellen und einen Bezier-Pfad zu einem CAShapeLayer hinzufügen, den Sie dem Layer der Ansicht hinzufügen. – rdelmar

Antwort

27

Sie möchten wahrscheinlich eine CAShapeLayer verwenden. Hier ist eine Demo:

import XCPlayground 
import UIKit 
import CoreText 

let view = UIView(frame: CGRectMake(0, 0, 300, 300)) 
XCPShowView("view", view) 

let imageView = UIImageView(image: UIImage(named: "profile.jpg")) 
imageView.frame = view.bounds 
imageView.contentMode = UIViewContentMode.ScaleAspectFill 
view.addSubview(imageView) 

let shape = CAShapeLayer() 
view.layer.addSublayer(shape) 
shape.opacity = 0.5 
shape.lineWidth = 2 
shape.lineJoin = kCALineJoinMiter 
shape.strokeColor = UIColor(hue: 0.786, saturation: 0.79, brightness: 0.53, alpha: 1.0).CGColor 
shape.fillColor = UIColor(hue: 0.786, saturation: 0.15, brightness: 0.89, alpha: 1.0).CGColor 

let path = UIBezierPath() 
path.moveToPoint(CGPointMake(120, 20)) 
path.addLineToPoint(CGPointMake(230, 90)) 
path.addLineToPoint(CGPointMake(240, 250)) 
path.addLineToPoint(CGPointMake(40, 280)) 
path.addLineToPoint(CGPointMake(100, 150)) 
path.closePath() 
shape.path = path.CGPath 

Ergebnis:

demo

Swift 3:

let shape = CAShapeLayer() 
cell.layer.addSublayer(shape) 
shape.opacity = 0.5 
shape.lineWidth = 2 
shape.lineJoin = kCALineJoinMiter 
shape.strokeColor = UIColor(hue: 0.786, saturation: 0.79, brightness: 0.53, alpha: 1.0).cgColor 
shape.fillColor = UIColor(hue: 0.786, saturation: 0.15, brightness: 0.89, alpha: 1.0).cgColor 

let path = UIBezierPath() 
path.move(to: CGPoint(x: 120, y: 20)) 
path.addLine(to: CGPoint(x: 230, y: 90)) 
path.addLine(to: CGPoint(x: 240, y: 250)) 
path.addLine(to: CGPoint(x: 100, y: 150)) 
path.close() 
shape.path = path.cgPath 
+0

Perfekt! Genau das, was ich gesucht habe! Vielen Dank! –