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
9
A
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:
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! –
diesen Mac App finden Sie in Objective C geschrieben Sie könnten eine Idee davon bekommen. – Sandeep
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