2014-07-30 3 views
5

मुझे लगता है कि आपूर्ति की बहस को स्वीकार करता है 'init' के लिए एक अधिभार नहीं पा सके स्विफ्ट में एक चक्र आकर्षित करने के लिए कोशिश कर रहा हूँ, लेकिन जब मैं अपने कोड लिखने मैं एक त्रुटि मिलती है "।तेजी से सर्कल खींचने के लिए UIBezierPath को कैसे प्रारंभ करें?

कक्षा में UIBezierPath है एक init समारोह:

init(arcCenter center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool) -> UIBezierPath 

लेकिन जब मैं इस कोड को मैं त्रुटि मिलती है के साथ इस घोषित .. की आवश्यकता है मैं अन्य प्रकार के लिए किसी भी चर डाली लेकिन अगर मैं iPhone 4 में इस संकलित मैं केवल त्रुटि नहीं मिलता है,? आईफोन 5/5 एस में। यह सही तरीके से कैसे घोषित कर सकता है?

let arcCenter = CGPoint(x: CGRectGetMidX(self.bounds), y: CGRectGetMidY(self.bounds)) 
    let radius  = Float(min(CGRectGetMidX(self.bounds) - 1, CGRectGetMidY(self.bounds)-1)) 

    let circlePath : UIBezierPath = UIBezierPath(arcCenter: arcCenter, radius: radius, startAngle: -rad(90), endAngle: rad(360-90), clockwise: true) 

धन्यवाद!

+1

इस कोशिश: चलो circlePath: UIBezierPath = UIBezierPath (arcCenter: arcCenter, त्रिज्या: CGFloat (त्रिज्या), startAngle: CGFloat (-rad (90)), endAngle: CGFloat (rad (360-90)), घड़ी की दिशा: सत्य) – azimov

+0

धन्यवाद! यह सही है! – user3745888

उत्तर

8

आपको CGFloat को UIBezierPath की init विधि में तर्क के रूप में पारित मानों को रूपांतरित करने की आवश्यकता है, क्योंकि स्विफ्ट उन्हें डबल या फ़्लोट (त्रिज्या दें) के रूप में देखता है।

let circlePath : UIBezierPath = UIBezierPath(arcCenter: arcCenter, radius: 
CGFloat(radius), startAngle: CGFloat(-rad(90)), endAngle: CGFloat(rad(360-90)), clockwise: true) 
+1

मुझे उपरोक्त कथन में -rad को समझ में नहीं आता है। क्या यह एक घोषित var है? इसका मूल्य क्या है? – zeeple

+1

मुझे लगता है कि रेड डिग्री DegreesToRadians के लिए रहें -> func rad (value: double) -> डबल { वापसी मूल्य * M_PI/180.0 } –

0

स्विफ्ट 3:

let circlePath = UIBezierPath(arcCenter: CGPoint.zero, radius: radius, startAngle: CGFloat(0), endAngle:CGFloat(M_PI * 2), clockwise: true) 
0

इस खेल का मैदान में copypasted जा सकता है:

import UIKit 
class Circle: UIView { 
    var strokeColor: UIColor 
    var fillColor: UIColor 
    init(frame: CGRect, strokeColor: UIColor, fillColor: UIColor = .clear) { 
     self.strokeColor = strokeColor 
     self.fillColor = fillColor 
     super.init(frame: frame) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    override func draw(_ rect: CGRect) { 
     let circlePath = UIBezierPath(arcCenter: CGPoint(x: frame.width/2, y: frame.height/2), radius: frame.height/2, startAngle: CGFloat(0), endAngle: CGFloat.pi * 2, clockwise: true) 
     strokeColor.setStroke() 
     fillColor.setFill() 
     circlePath.lineWidth = 1 
     circlePath.stroke() 
    } 

} 


let circle = Circle(frame: CGRect(x: 0, y: 0, width: 100, height: 100), strokeColor: .red, fillColor: .blue) 
संबंधित मुद्दे