2016-04-22 9 views
0

Ich versuche, eine UIView mit Ecken wie eine Form eines Diamanten zu erzeugen, wie im Bild gezeigt:Diamantartiger UIView

diamond

Ich bin vertraut mit Ecken abrunden:

myView.layer.cornerRadius = 10 

Allerdings möchte ich eine andere Form. Wie könnte ich diesen Effekt erzeugen? Danke für Ihre Hilfe!

+0

Überschreiben Sie 'drawRect:'. – rmaddy

+0

Entschuldigung, ich habe diese Methode noch nie zuvor benutzt. Könnten Sie mir bitte einen Beispielcode zur Verfügung stellen? Danke – penatheboss

+1

Bitte lesen Sie die [Programmieranleitung für iOS anzeigen] (https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009503) – rmaddy

Antwort

3

Der beste Weg, um ein Problem wie dieses zu lösen, ist die Verwendung von CAShapeLayer. Hier ist die Art von Sache, die funktionieren würde: kleben Sie es auf einen Spielplatz und sehen Sie, wie es von den Ecken abschneidet.

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

Danke. Dieser Code erstellt die richtigen Zeilen. – penatheboss

+0

ist es möglich, dass Sie mir zeigen könnten, wie man eine Funktion damit erstellt, damit ich es für viele Ansichten verwenden kann. Ich habe es selbst versucht, aber ich war nicht in der Lage, das gleiche Ergebnis zu erzielen. – penatheboss

+0

Sicher, Maskierung aktualisiert als UIView-Erweiterung. –