2016-01-25 3 views
3

у меня есть этот код для UIVIew:DrawRect с закругленными углами

override func drawRect(rect: CGRect) { 

    let toolbarSize = CGFloat(UIDevice.currentDevice().userInterfaceIdiom == .Pad ? 0 : 54) 

    let width = CGRectGetWidth(self.frame) 
    let height = CGRectGetHeight(self.frame) - toolbarSize 

    let heightSpan = floor(height/2 - self.cropSize.height/2) 
    let widthSpan = floor(width/2 - self.cropSize.width/2) 

    // fill outer rect 
    UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).set() 
    UIRectFill(self.bounds) 

    // fill inner border 
    UIColor(red: 1, green: 1, blue: 1, alpha: 0.5).set() 
    UIRectFrame(CGRectMake(widthSpan - 2, heightSpan - 2, self.cropSize.width + 4, 
     self.cropSize.height + 4)) 

    // fill inner rect 
    UIColor.clearColor().set() 
    UIRectFill(CGRectMake(widthSpan, heightSpan, self.cropSize.width, self.cropSize.height)) 
} 

Это Рисует прямоугольник с белой каймой на мой UIView, я хочу, чтобы добавить радиус угла, чтобы нарисовать круг.

Возможно ли это?

+1

Если угловой радиус и цвет границы - это то, что вам нужно, нет необходимости беспокоить drawRect. Вы можете просто задать свойство углового радиуса и цвет границы uiview. –

+0

"* Я хочу добавить радиус угла, чтобы нарисовать круг *", посмотрели ли вы на 'CGContextFillEllipseInRect'? – Hamish

+0

'UIBezierPath' - это не вариант? – vadian

ответ

0

Rect with Rounded Corners: Используйте Путь.

Если вы не хотите, чтобы применить закругленные углы всего представления (простой) или на подслой (наиболее гибкий) с помощью layer.cornerRadius, вы рисуете roundedRect с UIBezierPath.
Квадрат roundedRect с cornerRadius из 1/2 высота заканчивается кругом или диском.

let path = UIBezierPath(roundedRect: innerRect,cornerRadius: 10) 
path.fill() 

3 roundedRect в вашем распоряжении:

let regular = UIBezierPath(roundedRect: CGRect, cornerRadius: CGFloat) 
let irregular = UIBezierPath(roundedRect: CGRect, 
         byRoundingCorners: UIRectCorner, cornerRadii: CGSize) 
let oval  = UIBezierPath(ovalInRect: CGRect) 

Использование path.stroke() для границы, path.fill() на содержание.


Пример в вашем контексте DrawRect:

// fill inner rect 
UIColor.clearColor().set() 
let innerRect = CGRectMake(widthSpan, heightSpan, 
          self.cropSize.width, self.cropSize.height) 

// replace UIRectFill(innerRect) by: 
let path = UIBezierPath(roundedRect: innerRect, cornerRadius: 10) 
path.fill() 

Вдохновленный этим excellent обсуждения:

UIBezierPath* path = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 100, 100) 
      cornerRadius: 10]; 
path.lineWidth = 1; 
[UIColor.clearColor setStroke]; 
[path stroke]; 
4

это работает хорошо для меня

someImageView.layer.borderWidth = 1 
    someImageView.layer.borderColor = UIColor.blackColor().CGColor 
    someImageView.layer.cornerRadius = someImageView.frame.height/2 
    someImageView.clipsToBounds = true 
0

Код можно использовать в awakeFromNib. код ниже работает довольно хорошо для меня

- (void)awakeFromNib { 
// Initialization code 
self.authorAvatar.layer.cornerRadius = self.authorAvatar.frame.size.width/2; 
self.authorAvatar.clipsToBounds = YES; 
} 

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

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