2016-04-22 2 views
0

Я пытаюсь создать UIView с углами, как в форме алмаза, как показано на рисунке:Алмазоподобное UIView

diamond

я знаком с округлением углов:

myView.layer.cornerRadius = 10 

Однако, я хочу другую форму. Как я могу создать этот эффект? Спасибо за вашу помощь!

+0

Override 'drawRect:'. – rmaddy

+0

Извините, я никогда раньше не использовал этот метод. Не могли бы вы предоставить мне пример кода? Спасибо – penatheboss

+1

Прочтите [Просмотреть руководство по программированию для iOS] (https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009503) – rmaddy

ответ

3

Лучший способ решить такую ​​проблему, используя CAShapeLayer. Вот что должно получиться: вставьте его в игровую площадку и посмотрите, как она зажимается по углам.

import UIKit 
import XCPlayground 

extension UIView { 
    func maskCorners(inset: CGFloat) { 
     let path = UIBezierPath() 
     path.moveToPoint(CGPoint(x: bounds.origin.x + inset,y: 0)) 
     path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds) - inset,y: 0)) 
     path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds), y: bounds.origin.y + inset)) 
     path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds), y: CGRectGetMaxY(bounds) - inset)) 
     path.addLineToPoint(CGPoint(x: CGRectGetMaxX(bounds) - inset,y: CGRectGetMaxY(bounds))) 
     path.addLineToPoint(CGPoint(x: bounds.origin.x + inset,y: CGRectGetMaxY(bounds))) 
     path.addLineToPoint(CGPoint(x: 0,y: CGRectGetMaxY(bounds) - inset)) 
     path.addLineToPoint(CGPoint(x: 0,y: bounds.origin.y + inset)) 
     path.addLineToPoint(CGPoint(x: bounds.origin.x + inset,y: 0)) 

     let mask = CAShapeLayer() 
     mask.frame = bounds 
     mask.path = path.CGPath 
     layer.mask = mask 
    } 
} 

let diamond = UIView(frame: CGRect(x:0, y: 0, width: 100, height:100)) 
diamond.backgroundColor = UIColor.redColor() 
XCPlaygroundPage.currentPage.liveView = diamond 
diamond.maskCorners(25) 
+0

Спасибо. Этот код создает правильные строки. – penatheboss

+0

Возможно ли, что вы можете показать мне, как создать функцию с этим, чтобы я мог использовать ее для многих видов. Я пробовал себя, но я не смог добиться такого же результата. – penatheboss

+0

Конечно, маскировка обновляется как расширение UIView. –