2016-06-20 27 views
1

Ich versuche, mehrere Formen (Rechteck, Dreieck, Kreis, ...) in Swift und dafür, ich benutze uibezierpath, aber ich bin nicht in der Lage zu zeichnen genau was ich will. Ich muss zum Beispiel ein Rechteck zeichnen, aber die Grenzen dieses Rechtecks ​​müssen unterschiedliche Linienbreite haben. Um dies zu tun, erstelle ich einen anderen Pfad und dann den "appendpath", um sie in einem Pfad zusammenzuführen. Das funktioniert, aber ich brauche auch ein Hintergrundbild in diesem Rechteck. Dafür erstelle ich eine Ebene und setze ihr ein Bild. Das Problem ist, dass kein Hintergrundbild angezeigt wird, wenn ich "appendpath" verwende, sicherlich, weil es meine Zeichnung nicht als Rechteck erkennt.uibezierpath mit mehreren Linienbreite und ein Hintergrundbild (swift)

Ich hoffe, es ist klar genug, aber gibt es eine Möglichkeit, eine Form mit einem Hintergrundbild zu zeichnen, und haben unterschiedliche Randbreite?

Danke für Ihre Hilfe !!

Antwort

1

Es gibt zwei Lösungen Ich würde Sie versuchen vorschlagen:

1) Masking

ein normales CALayer erstellen und das Bild als contents gesetzt. Erstellen Sie dann einen CAShapeLayer mit dem Pfad, den Sie mögen, und verwenden Sie ihn als mask der ersten Ebene.

Z. B .:

let imageLayer = CALayer() 
imageLayer.contents = UIImage(named: "yourImage")?.CGImage // Your image here 
imageLayer.frame = ... // Define a frame 

let maskPath = UIBezierPath(...) // Create your path here 
let maskLayer = CAShapeLayer() 
maskLayer.path = maskPath.CGPath 

imageLayer.mask = maskLayer 

Vergessen Sie nicht die richtigen Frames und Pfade zu setzen, und Sie sollten die Wirkung, die Sie wollten erreichen können.

2) Füllfarbe

erstellen CAShapeLayer mit dem Pfad, den Sie mögen, dann Ihr Bild als fillColor verwenden.

Z. B .:

let path = UIBezierPath(...) // Create your path here 
let layer = CAShapeLayer() 
layer.path = path.CGPath 

let image = UIImage(named: "yourImage") // Your image here 
layer.fillColor = UIColor(patternImage: image!).CGColor 

Sie können diesen Ansatz einfacher finden auf dem ersten, aber die Steuerung die Art und Weise das Bild Deine Form füllt, ist überhaupt nicht trivial.

Ich hoffe, das wird helfen.
Wenn Sie weitere Details wünschen, geben Sie bitte ein Bild oder eine Skizze von dem, was Sie erreichen möchten und/oder dem Code, den Sie bisher geschrieben haben. Vielen Dank!

+0

Vielen Dank für Ihre Antwort! Ich werde das heute versuchen, aber wenn ich deinen Beitrag lese, bin ich mir ziemlich sicher, dass es mit dem, was ich versuche, funktionieren wird. :) – Adz

+1

Hat es am Ende geholfen? Wenn ja, bitte akzeptieren Sie die Antwort, ansonsten lassen Sie es mich wissen. Vielen Dank! – Para