2016-04-12 1 views
1

Так что я использую PaintCode, чтобы сделать фигуры, и я хочу, чтобы мой UIButton имел эту форму.UIButton и UIBezierPath

Форма Я сделал вид, как это в коде:

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() 

И я поставил UIButton слоев в моем cellForItemAtIndexPath, но как я могу сделать форму, я сделал на моей кнопке?

+0

Итак, вы в основном хотите, чтобы эта кнопка имела такую ​​форму? –

+0

@KrishWadhwana Да, правильно. –

+0

Создали ли вы отдельный класс типа UIButton и ввели код там? Также вы вызвали функцию drawRect? –

ответ

0

Вы можете добавить путь в слой. (Здесь shapeLayer объявлен как собственность.)

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

Чтобы сделать то, что вы хотите сделать, вы должны создать новый CocoaTouchClass, который является подклассом UIButton правой кнопкой мыши и выбрав пункт «New File». Когда вы находитесь в этом файле, вам нужно переопределить функцию, называемую drawRect. Это то, что ваш файл должен выглядеть как-

import UIKit 

class BezierButtonDrawing: UIButton { 

    override func drawRect (rect: CGRect) { 

     //your code from PaintCode goes here 

     } 

} 

Все, что вам нужно сделать после того, как, перейдите Main.storyboard, нажмите на кнопке, и установить его класс с идентификацией инспектора «BezierButtonDrawing» или что-то вы назвали свой класс.

Если у вас есть несколько фигур в приложении, вы можете просто сделать то, что предложил RichardG. Вот быстрое трансляционно

Объявите это в своем классе первый (не viewDidLoad)

var shapeLayer = CAShapeLayer() 

Далее, это то, что вы делаете в viewDidLoad -

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) 

Вот так. Просто создайте и запустите, и у вас будет то, что вы хотели :)

+0

Хорошо, теперь, если у меня есть 4 разных фигуры, я хочу добавить к 4 различным кнопкам? Нужно ли мне 4 разных класса? –

+0

Просто создайте четыре класса для этих четырех кнопок и назначьте им соответствующие классы. Это самый простой способ. Кроме того, если вы создали некоторую фигуру, например шестиугольник, и вы создаете для нее класс, вы можете назначить один и тот же класс нескольким кнопкам, и эти кнопки будут отображаться как шестиугольники. –

+0

Я сделал, как вы сказали, но кнопка не показывает никакой формы? Как так? –

 Смежные вопросы

  • Нет связанных вопросов^_^