2015-05-05 2 views
0

У меня есть очень простой контроллер вид ..UIBezierPath - byRoundingCorners - Rect

import UIKit 

class ViewController: UIViewController { 

    let f = TstKocka(frame: CGRectMake(100,100, 150, 150)) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.addSubview(f) 

    } 

} 

И у меня есть класс UIView:

class TstKocka: UIView { 


    override init(frame: CGRect) { 
     super.init(frame: frame) 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    override func drawRect(rect: CGRect) { 

     var path = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.AllCorners, cornerRadii: CGSize(width: 2.0, height: 2.0)) 

     path.lineWidth = 1.0 
     path.stroke() 

    } 

} 

И я пытаюсь создать скругленный прямоугольник, но я не знаю, как это сделать. Я прочитал много учебников, но никто из них не работал на меня. Пожалуйста, помогите мне.

+0

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

ответ

1

Поскольку вы не предоставляете цвет заливки, я думаю, что ваш прямоугольник должен иметь четкий цвет. чтобы сделать эту работу изменить initwithframe на следующее:

override init(frame: CGRect) { 
    super.init(frame: frame) 
    opaque = false 
} 

затем увеличить cornerradii значение (до 20,0, 20,0, например), чтобы увидеть, что это работает! :)

EDIT

начинка на самом деле так просто, как поглаживание:

let path = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.AllCorners, cornerRadii: CGSize(width: 20.0, height: 20.0)) 
path.lineWidth = 1.0 

UIColor.blueColor().setFill() // or whatever fill color you like 
path.fill() 

UIColor.redColor().setStroke() 
path.stroke() 
+0

без этой строки: opaque = false мой прямоугольник был полностью черным, и я не мог видеть округления по углам. теперь я добавил эту строку, как вы писали, и она работает, и я вижу закругленные углы! Спасибо. Но как я могу сделать, чтобы заполнить мой прямоугольник любым цветом, а затем округлить углы? :) – solarenqu

+0

большое спасибо! :) – solarenqu

0

Если вы пытаетесь создать округлый вид прямоугольника, который зажимает содержание, вы должны использовать маски слоя или просто -cornerRadius свойство на уровне просмотров, установка также -borderWidth.
Если вы просто хотите, чтобы изображение было закругленным прямоугольником, перед поглаживанием вы должны установить цвет хода.
я не знаю, быстры, но в ObjC может быть что-то вроде этого

- (void) drawRect:(CGRect) rect { 
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:5.0]; 
[[UIColor redColor] setStroke]; 
[bezierPath stroke]; 
} 

В Swift вероятно:

override func drawRect(rect: CGRect) { 
     let path = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.AllCorners, cornerRadii: CGSize(width: 2.0, height: 2.0)) 
    UIColor.redColor().setStroke() 
     path.lineWidth = 1.0 
     path.stroke() 

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