2014-10-30 8 views
20

के साथ पहली बार BezierPaths का उपयोग करके एक रेखा बनाएं, यह सोचकर कि यह फ़ंक्शन वास्तव में कैसे कार्यान्वित किया जाना चाहिए। स्क्रीन पर ड्राइंग के विपरीत वर्तमान में बेजियर पथ छवि के फ्रेम के भीतर चलता है।UIBezierPath

क्या ऐसा करने का कोई बेहतर तरीका है?

func drawLineFromPoint(start : CGPoint, toPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) { 

    var maxWidth = abs(start.x - end.x) 
    var maxHeight = abs(start.y - end.y) 

    var contextSize : CGSize! 
    if maxWidth == 0 { 
     contextSize = CGSize(width: 1, height: maxHeight) 
    }else { 
     contextSize = CGSize(width: maxWidth, height: 1) 
    } 

    //design the path 
    UIGraphicsBeginImageContextWithOptions(contextSize, false, 0) 
    var path = UIBezierPath() 
    path.lineWidth = 1.0 
    lineColor.set() 

    //draw the path and make visible 
    path.moveToPoint(start) 
    path.addLineToPoint(end) 
    path.stroke() 

    //create image from path and add to subview 
    var image = UIGraphicsGetImageFromCurrentImageContext() 
    var imageView = UIImageView(image: image) 
    view.addSubview(imageView) 
    UIGraphicsEndImageContext() 
} 
+0

अन्य, अधिक प्रत्यक्ष दृष्टिकोण, बल्कि इस तरह के चित्रों का उपयोग की तुलना में, 'उपयोग करने के लिए कर रहे हैं CAShapeLayer 'या कस्टम' drawRect', जैसा कि यहां वर्णित है: http://stackoverflow.com/a/16846770/1271826 – Rob

उत्तर

38

यह इस तरह से कर रही है समाप्त हुई: विलियम फाल्कन के उत्तर

func drawLineFromPoint(start : CGPoint, toPoint end:CGPoint, ofColor lineColor: UIColor, inView view:UIView) { 

    //design the path 
    var path = UIBezierPath() 
    path.moveToPoint(start) 
    path.addLineToPoint(end) 

    //design path in layer 
    var shapeLayer = CAShapeLayer() 
    shapeLayer.path = path.CGPath 
    shapeLayer.strokeColor = lineColor.CGColor 
    shapeLayer.lineWidth = 1.0 

    view.layer.addSublayer(shapeLayer) 
} 
+1

मैंने परत में डिज़ाइन पथ का उपयोग नहीं किया। लेकिन सिर्फ 'पथ। ट्रोक'। मुझे समझ में नहीं आता कि लाइन क्यों नहीं जोड़ा जा रहा है। कोई सलाह? @williamFalcon –

2

स्विफ्ट 3.1 संस्करण + बेहतर

यह पहले से ही स्वीकार किए जाते हैं जवाब का सिर्फ एक अद्यतन संस्करण है, और मैं सिर्फ इसमें थोड़ा और जोड़ा।

func drawLineFromPointToPoint(startX: Int, toEndingX endX: Int, startingY startY: Int, toEndingY endY: Int, ofColor lineColor: UIColor, widthOfLine lineWidth: CGFloat, inView view: UIView) { 

    let path = UIBezierPath() 
    path.move(to: CGPoint(x: startX, y: startY)) 
    path.addLine(to: CGPoint(x: endX, y: endY)) 

    let shapeLayer = CAShapeLayer() 
    shapeLayer.path = path.cgPath 
    shapeLayer.strokeColor = lineColor.cgColor 
    shapeLayer.lineWidth = lineWidth 

    view.layer.addSublayer(shapeLayer) 

} 

और निश्चित रूप से कार्यान्वयन किया जाएगा

drawLineFromPointToPoint(startX: Int, toEndingX: Int, startingY: Int, toEndingY: Int, ofColor: UIColor, widthOfLine: CGFloat, inView: UIView) 

मैं स्वीकार किए जाते हैं जवाब से क्या बदल गया

मैं वार्स की सुविधा देता है के लिए बदल गया है, और यह इनपुट के लिए आसान आरंभ और अंत बनाया एक्स और वाई दोनों का। मैं उपयोगकर्ता को लाइन की चौड़ाई बदलने की अनुमति भी देता हूं।

मैंने मानों को टाइप इंट के लिए चुना है, लेकिन आप उन्हें अन्य स्वीकृत विकल्पों के रूप में बदल सकते हैं।

0

शीर्ष पर क्षैतिज रेखा आरेखित करने के लिए:

let path = UIBezierPath() 
path.moveToPoint(CGPoint(x: 0, y: 0)) 
path.addLineToPoint(CGPoint(x: yourView.frame.width, y: 0)) 

let shapeLayer = CAShapeLayer() 
shapeLayer.path = path.CGPath 
shapeLayer.strokeColor = UIColor.lightGrayColor().CGColor 
shapeLayer.lineWidth = 0.5 

yourView.layer.addSublayer(shapeLayer) 

तल पर क्षैतिज रेखा आरेखित करने के लिए:

let path = UIBezierPath() 
path.moveToPoint(CGPoint(x: 0, y: yourView.frame.height)) 
path.addLineToPoint(CGPoint(x: yourView.frame.width, y: yourView.frame.height)) 

let shapeLayer = CAShapeLayer() 
shapeLayer.path = path.CGPath 
shapeLayer.strokeColor = UIColor.lightGrayColor().CGColor 
shapeLayer.lineWidth = 0.5 

yourView.layer.addSublayer(shapeLayer) 
संबंधित मुद्दे