2014-10-19 13 views
6

Ich versuche, einen gestrichelten Rahmen mit CALayer auf einem UIImageView hinzuzufügen. Ich habe eine Methode gefunden, aber funktioniert das in Swift und wie kann ich es in Swift konvertieren? o haben Sie eine andere imageView, die einen Rand hat, also wäre die beste Lösung, um CALayer zu verwenden, also sehen sie ähnlich aus? Wie kann ich diesegestrichelter Rahmen UIImageView swift

obj-c-Code zu swift erhalten?

- (CAShapeLayer *) addDashedBorderWithColor: (CGColorRef) color { 
    CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 

    CGSize frameSize = self.size; 

    CGRect shapeRect = CGRectMake(0.0f, 0.0f, frameSize.width, frameSize.height); 
    [shapeLayer setBounds:shapeRect]; 
    [shapeLayer setPosition:CGPointMake(frameSize.width/2,frameSize.height/2)]; 

    [shapeLayer setFillColor:[[UIColor clearColor] CGColor]]; 
    [shapeLayer setStrokeColor:color]; 
    [shapeLayer setLineWidth:5.0f]; 
    [shapeLayer setLineJoin:kCALineJoinRound]; 
    [shapeLayer setLineDashPattern: 
    [NSArray arrayWithObjects:[NSNumber numberWithInt:10], 
    [NSNumber numberWithInt:5], 
    nil]]; 
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:shapeRect cornerRadius:15.0]; 
    [shapeLayer setPath:path.CGPath]; 

    return shapeLayer; 
} 

Antwort

19

Ok, ich würde einfach in der benutzerdefinierten Ansicht Klasse wie folgt tun:

class DashedBorderView: UIView { 

    let _border = CAShapeLayer() 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     setup() 
    } 

    init() { 
     super.init(frame: CGRectZero) 
     setup() 
    } 

    func setup() { 
     _border.strokeColor = UIColor.whiteColor().CGColor 
     _border.fillColor = nil 
     _border.lineDashPattern = [4, 4] 
     self.layer.addSublayer(_border) 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     _border.path = UIBezierPath(roundedRect: self.bounds, cornerRadius:8).CGPath 
     _border.frame = self.bounds 
    } 
} 
+0

Danke @jsiodtb für das Hinzufügen dieser Zeile. –

+0

Das funktioniert für mich! Danke –

+0

Arbeitet wunderbar, ich habe es ein bisschen bearbeitet, um es allgemeiner zu machen. Danke vielmals! – n13

0

Versuchen Sie zunächst, den Code in Swift zu konvertieren. Wenn Sie Probleme haben, posten Sie das Problem, das Sie haben.

ich werde Ihnen den Start:

func addDashedBorderWithColor(color: UIColor) -> CAShapeLayer { 
    let shapeLayer = CAShapeLayer() 

    let frameSize = self.bounds.size 
    let shapeRect = CGRect(x: 0, y: 0, width: frameSize.width, height: frameSize.height) 
    shapeLayer.bounds = shapeRect 
    //... 
0

Aktualisiert für Swift 3:

Wenn Sie Ihr ImageView/UIView/UILabel/UITextField als gestrichelten Rahmen erstellen möchten, dann verwenden Sie unter einfachen Linien o f-Code;

func makeDashedBorder() { 

    let mViewBorder = CAShapeLayer() 
    mViewBorder.strokeColor = UIColor.magenta.cgColor 
    mViewBorder.lineDashPattern = [2, 2] 
    mViewBorder.frame = mYourAnyTypeOfView.bounds 
    mViewBorder.fillColor = nil 
    mViewBorder.path = UIBezierPath(rect: mYourAnyTypeOfView.bounds).cgPath 
    mYourAnyTypeOfView.layer.addSublayer(mViewBorder) 
} 

// Hinweis: wo, mYourAnyTypeOfView = UIView/UIImageView/UILabel/UITextField und etc.

// Genießen Codierung ..!

Verwandte Themen