2014-10-19 4 views
6

Sto tentando di aggiungere un bordo tratteggiato utilizzando CALayer su UIImageView. ho trovato un metodo, ma è che funziona in modo rapido e come posso convertirlo in rapido? o avere un altro imageView che ha un bordo, quindi sarebbe la soluzione migliore per usare CALayer, quindi hanno un aspetto simile? Come posso ottenere questobordo tratteggiato UIImageView swift

codice obj-c per swift?

- (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; 
} 

risposta

19

Ok, farei semplicemente come questo nella classe di visualizzazione personalizzata:

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

Grazie a @jsiodtb per l'aggiunta di quella linea. –

+0

Questo lavoro per me! Grazie –

+0

Funziona magnificamente, l'ho modificato un po 'per renderlo più generale. Molte grazie! – n13

0

Fare un tentativo di convertire il codice in Swift per primo. Se hai problemi, pubblica il problema che stai riscontrando.

io Ti iniziare:

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

Aggiornato per Swift 3:

se si desidera rendere ImageView/UIView/UILabel/UITextField come bordo tratteggiato quindi utilizzato sotto le linee semplici o codice f;

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) 
} 

// Nota: dove, mYourAnyTypeOfView = UIView/UIImageView/UILabel/UITextField ed ecc

// Godetevi codifica ..!