2016-04-12 16 views
1

So verwende ich PaintCode, um Formen zu machen, und ich möchte, dass meine UIButton diese Form haben.UIButton und UIBezierPath

Die Form I sieht in Code wie folgt aus:

let bezierPath = UIBezierPath() 
bezierPath.moveToPoint(CGPoint(x: 81.5, y: 48.5)) 
bezierPath.addLineToPoint(CGPoint(x: 105.5, y: 24.5)) 
bezierPath.addLineToPoint(CGPoint(x: 129.5, y: 48.5)) 
bezierPath.addLineToPoint(CGPoint(x: 123.5, y: 48.5)) 
bezierPath.addLineToPoint(CGPoint(x: 105.5, y: 30.5)) 
bezierPath.addLineToPoint(CGPoint(x: 87.5, y: 48.5)) 
bezierPath.addLineToPoint(CGPoint(x: 81.5, y: 48.5)) 
bezierPath.closePath() 
UIColor.whiteColor().setFill() 
bezierPath.fill() 
UIColor.blackColor().setStroke() 
bezierPath.lineWidth = 1 
bezierPath.stroke() 

Und Ich habe die UIButton Schichten in meinem cellForItemAtIndexPath, aber wie kann ich die Form, die ich auf meinem Knopf gemacht machen?

+0

Also willst du im Grunde, dass diese Schaltfläche die richtige Form hat? –

+0

@KrishWadhwana Ja, richtig. –

+0

Haben Sie eine separate Klasse vom Typ UIButton erstellt und den Code dort eingegeben? Haben Sie die Funktion drawRect aufgerufen? –

Antwort

0

Sie können den Pfad in der Ebene hinzufügen. (Hier shapeLayer als Eigentum erklärt.)

if (self.shapeLayer != nil) { 
    [self.shapeLayer removeFromSuperlayer]; 
    self.shapeLayer = nil; 
} 
_shapeLayer = [CAShapeLayer layer]; 
self.shapeLayer.lineWidth = 5.0; 
self.shapeLayer.fillColor = [UIColor clearColor].CGColor; 
self.shapeLayer.path = bezierPath.CGPath; 
self.shapeLayer.strokeColor = strokeColor.CGColor; 
[[self.button layer] addSublayer:self.shapeLayer]; 
0

zu tun, was Sie tun mögen, haben Sie eine neue CocoaTouchClass zu schaffen, die eine Unterklasse von UIButton durch einen Rechtsklick und „Neue Datei“ wählen. Sobald Sie in dieser Datei sind, müssen Sie eine Funktion namens drawRect überschreiben. Dies ist, was Ihre Datei wie-

import UIKit 

class BezierButtonDrawing: UIButton { 

    override func drawRect (rect: CGRect) { 

     //your code from PaintCode goes here 

     } 

} 

Alles, was Sie danach tun müssen, aussehen sollte, ist, zu Main.storyboard gehen, klicken Sie auf Schaltfläche, und legen Sie es Klasse von Identity Inspector „BezierButtonDrawing“ oder was auch immer Sie haben Ihre Klasse benannt.

Wenn Sie mehrere Formen in Ihrer App haben, können Sie einfach tun, was RichardG vorgeschlagen hat. Hier ist die rasche translation-

declare dies in Ihrer Klasse erste (nicht in viewDidLoad)

var shapeLayer = CAShapeLayer() 

Als nächstes ist das, was Sie in viewDidLoad tun -

self.shapeLayer.lineWidth = 5.0 
self.shapeLayer.fillColor = UIColor.blackColor().CGColor 
self.shapeLayer.path = bezierPath.CGPath 
self.shapeLayer.strokeColor = UIColor.blackColor().CGColor 
self.yourButton.layer.addSublayer(shapeLayer) 

Das ist es. Baue und renne einfach, und du wirst haben, was du wolltest :)

+0

Ok, was ist, wenn ich 4 verschiedene Formen habe, die ich zu 4 verschiedenen Tasten hinzufügen möchte? Brauche ich dann 4 verschiedene Klassen? –

+0

Erstellen Sie einfach vier Klassen für diese vier Schaltflächen, und weisen Sie ihnen ihre jeweiligen Klassen zu. Es ist der einfachste Weg. Wenn Sie eine Form erstellt haben, beispielsweise ein Sechseck, und Sie eine Klasse dafür erstellen, können Sie auch mehreren Tasten dieselbe Klasse zuweisen, und diese Schaltflächen werden als Sechsecke angezeigt. –

+0

Ich tat, wie Sie sagten, aber der Knopf zeigt keine Form? Woher? –