2012-10-03 14 views
19

का उपयोग कर मैं एक धराशायी बॉक्स आकर्षित करने के लिए, निम्नलिखित कोड का उपयोग कर पा रहा था लाइन धराशायी:ड्राइंग CALayer

CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
CGRect shapeRect = CGRectMake(0.0f, 0.0f, 200.0f, 100.0f); 
[shapeLayer setBounds:shapeRect]; 
[shapeLayer setPosition:CGPointMake(self.coreImageView_.frameX, self.coreImageView_.frameBottom - self.coreImageView_.frameHeight/2)]; 
[shapeLayer setFillColor:[[UIColor clearColor] CGColor]]; 
[shapeLayer setStrokeColor:[[UIColor whiteColor] CGColor]]; 
[shapeLayer setLineWidth:2.0f]; 
[shapeLayer setLineJoin:kCALineJoinRound]; 
[shapeLayer setLineDashPattern: 
[NSArray arrayWithObjects:[NSNumber numberWithInt:5], 
[NSNumber numberWithInt:5], 
    nil]]; 

अब अगर मैं सिर्फ बी बिंदु से बिंदु एक्स से एक चित्तीदार लाइन आकर्षित करने के लिए चाहते हैं, मैं कैसे को संशोधित करना चाहिए यह कोड?

+0

बिंदु एक्स और बिंदु बी द्वारा आपका क्या मतलब है? वे आपके आयत पर अंक हैं या वे स्क्रीन पर कहीं भी 2 अंक हैं? –

+0

संभावित डुप्लिकेट [यहां] (http://stackoverflow.com/questions/12091916/uiview-with-a-dashed-line) –

+0

http://stackoverflow.com/questions/12091916/uiview-with-a-dashed- लाइन/12092002 # 12092002 –

उत्तर

55

लाइन्स पहले लाइन का एक प्रारंभिक बिंदु के लिए पथ चलती तो एक बात करने के लिए एक रेखा खंड जोड़कर तैयार कर रहे हैं:

CGContextBeginPath(context); 
CGContextMoveToPoint(context, 10.5f, 10.5f); 
CGContextAddLineToPoint(context, 20.5f, 20.5f); 
CGContextClosePath(context); 
CGContextDrawPath(context, kCGPathFillStroke); 

धराशायी रेखा खींचने के लिए, आप CAShapeLayer

CAShapeLayer *shapeLayer = [CAShapeLayer layer]; 
[shapeLayer setBounds:self.bounds]; 
[shapeLayer setPosition:self.center]; 
[shapeLayer setFillColor:[[UIColor clearColor] CGColor]]; 
[shapeLayer setStrokeColor:[[UIColor blackColor] CGColor]]; 
[shapeLayer setLineWidth:3.0f]; 
[shapeLayer setLineJoin:kCALineJoinRound]; 
[shapeLayer setLineDashPattern: 
[NSArray arrayWithObjects:[NSNumber numberWithInt:10], 
    [NSNumber numberWithInt:5],nil]]; 

// Setup the path 
CGMutablePathRef path = CGPathCreateMutable(); 
CGPathMoveToPoint(path, NULL, 10, 10); 
CGPathAddLineToPoint(path, NULL, 100,100); 

[shapeLayer setPath:path]; 
CGPathRelease(path); 

[[self layer] addSublayer:shapeLayer]; 
उपयोग करने की आवश्यकता
+0

मैंने सीजीकॉन्टेक्स्ट के साथ ऐसा करने की कोशिश कर कई घंटे तक दीवार पर अपने सिर को टक्कर लगी। बहुत बहुत धन्यवाद! – user1244109

0

स्विफ्ट 2.2

दूसरों समय की बचत करने के लिए यहाँ में इस छोड़ने ..

extension UIView { 
    func addDashedLine(color: UIColor = UIColor.lightGrayColor()) { 
     layer.sublayers?.filter({ $0.name == "DashedTopLine" }).map({ $0.removeFromSuperlayer() }) 
     self.backgroundColor = UIColor.clearColor() 
     let cgColor = color.CGColor 

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

     shapeLayer.name = "DashedTopLine" 
     shapeLayer.bounds = shapeRect 
     shapeLayer.position = CGPoint(x: frameSize.width/2, y: frameSize.height/2) 
     shapeLayer.fillColor = UIColor.clearColor().CGColor 
     shapeLayer.strokeColor = cgColor 
     shapeLayer.lineWidth = 1 
     shapeLayer.lineJoin = kCALineJoinRound 
     shapeLayer.lineDashPattern = [4, 4] 

     let path: CGMutablePathRef = CGPathCreateMutable() 
     CGPathMoveToPoint(path, nil, 0, 0) 
     CGPathAddLineToPoint(path, nil, self.frame.width, 0) 
     shapeLayer.path = path 

     self.layer.addSublayer(shapeLayer) 
    } 
} 
1

स्विफ्ट, अधिक कॉम्पैक्ट:

func addDashedLine(fromPoint start: CGPoint, toPoint end:CGPoint) { 
    let line = CAShapeLayer() 
    let linePath = UIBezierPath() 
    linePath.moveToPoint(start) 
    linePath.addLineToPoint(end) 
    line.path = linePath.CGPath 
    line.strokeColor = UIColor.redColor().CGColor 
    line.lineWidth = 1 
    line.lineJoin = kCALineJoinRound 
    line.lineDashPattern = [4, 4] 
    self.layer.addSublayer(line) 
} 
2

इस कोड की कोशिश करें, यह मेरे लिए,

काम करता है

स्विफ्ट 3.0

extension UIView { 
    func addDashedLine(strokeColor: UIColor, lineWidth: CGFloat) { 

     backgroundColor = .clear 

     let shapeLayer = CAShapeLayer() 
     shapeLayer.name = "DashedTopLine" 
     shapeLayer.bounds = bounds 
     shapeLayer.position = CGPoint(x: frame.width/2, y: frame.height/2) 
     shapeLayer.fillColor = UIColor.clear.cgColor 
     shapeLayer.strokeColor = strokeColor.cgColor 
     shapeLayer.lineWidth = lineWidth 
     shapeLayer.lineJoin = kCALineJoinRound 
     shapeLayer.lineDashPattern = [4, 4] 

     let path = CGMutablePath() 
     path.move(to: CGPoint.zero) 
     path.addLine(to: CGPoint(x: frame.width, y: 0)) 
     shapeLayer.path = path 

     layer.addSublayer(shapeLayer) 
    } 
} 
0

यह

//Dashed line for road 
    CAShapeLayer *dashedLine = [CAShapeLayer layer]; 
    [dashedLine setFrame:CGRectMake(0, 342, 100 , 100)]; 

    // Setup the path 
    CGMutablePathRef thePath = CGPathCreateMutable(); 
    CGPathMoveToPoint(thePath, NULL, 0, 10); 
    CGPathAddLineToPoint(thePath, NULL, screenSize.width,10); 
    dashedLine.path = thePath; 
    CGPathRelease(thePath); 

    [dashedLine setLineDashPattern: [NSArray arrayWithObjects:[NSNumber numberWithFloat:15], nil]]; 
    dashedLine.lineWidth = 1.0f; 
    dashedLine.strokeColor = [[UIColor redcolor] CGColor]]; 

    [self.view.layer addSublayer:dashedLine]; 
0
CAShapeLayer *shaplayer = [CAShapeLayer layer]; 
    shaplayer.frame = CGRectMake(100, 100, 100, 100); 
    [self.view.layer addSublayer:shaplayer]; 
    UIBezierPath *uipath = [UIBezierPath bezierPath]; 
    [uipath moveToPoint:CGPointMake(50, 200)]; 
    [uipath addLineToPoint:CGPointMake(250, 200)]; 
    shaplayer.path = uipath.CGPath; 
    shaplayer.strokeColor = [UIColor redColor].CGColor; 
    shaplayer.lineDashPattern = @[@4]; 
+0

इस कोड स्निपेट के लिए धन्यवाद, जो कुछ तत्काल सहायता प्रदान कर सकता है। एक उचित स्पष्टीकरण [काफी सुधार] होगा (https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) यह दिखाकर इसका शैक्षणिक मूल्य यह समस्या का एक अच्छा समाधान क्यों है, और होगा भविष्य के पाठकों के लिए समान, लेकिन समान नहीं, प्रश्नों के साथ इसे और अधिक उपयोगी बनाएं। स्पष्टीकरण जोड़ने के लिए कृपया अपना उत्तर संपादित करें, और संकेत दें कि कौन सी सीमाएं और धारणाएं लागू होती हैं। – basvk

0

नीचे नीचे के रूप में सरल कोड के साथ उद्देश्य सी में काम कर कोड स्निपेट UIView (Xamarin IOS)

नोट में एक डैश वाली रेखा आकर्षित करने के लिए किया जाता है समझे : विभाजक दृश्य मेरा यूआईवी व्यू है जिसे मुझे डैश किया गया है

public void ShowDottedLine() 
{ 
     var dashedLayer = new CAShapeLayer(); 
     var frameSize = separatorView.Frame.Size; 
     var shapeRect = new CGRect(0, 0, frameSize.Width, frameSize.Height); 
     dashedLayer.Bounds = shapeRect; 
     dashedLayer.Position = new CGPoint(frameSize.Width/2, frameSize.Height/2); 
     dashedLayer.FillColor = UIColor.Clear.CGColor; 
     dashedLayer.StrokeColor = ColorUtils.ColorWithHex(ColorConstants.DarkBlue).CGColor; 
     dashedLayer.LineWidth = 2; 
     dashedLayer.LineJoin = CAShapeLayer.JoinRound; 
     NSNumber[] patternArray = {5,5}; 
     dashedLayer.LineDashPattern = Array; 
     var path = new CGPath(); 
     path.MoveToPoint(CGPoint.Empty); 
     path.AddLineToPoint(new CGPoint(frameSize.Width, 0)); 
     dashedLayer.Path = path; 
     separatorView.Layer.AddSublayer(dashedLayer); 
} 
संबंधित मुद्दे