UIView

2016-02-01 7 views
8

पर सर्कल के चारों ओर ऑब्जेक्ट्स को सही तरीके से सेट करने के लिए कैसे करें मैंने कस्टम दृश्य के केंद्र पर स्थित सर्कल के चारों ओर ऑब्जेक्ट्स रखने के लिए कुछ कोड लिखा है, लेकिन यह सर्कल के चारों ओर पूरी तरह से नहीं है। मुझे नहीं पता कि कोड कहां गलत है।UIView

func createObjectsAroundCircle() { 

    let center = CGPointMake(bounds.width/2 ,bounds.height/2) 
    let radius : CGFloat = 100 
    let count = 20 

    var angle = CGFloat(2 * M_PI) 
    let step = CGFloat(2 * M_PI)/CGFloat(count) 

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

    let shapeLayer = CAShapeLayer() 
    shapeLayer.path = circlePath.CGPath 

    shapeLayer.fillColor = UIColor.clearColor().CGColor 
    shapeLayer.strokeColor = UIColor.redColor().CGColor 
    shapeLayer.lineWidth = 3.0 

    self.layer.addSublayer(shapeLayer) 

    // set objects around circle 
    for var index = 0; index < count ; index++ { 
     let x = cos(angle) * radius + center.x 
     let y = sin(angle) * radius + center.y 

     let label = UILabel() 
     label.text = "\(index)" 
     label.frame.origin.x = x 
     label.frame.origin.y = y 
     label.font = UIFont(name: "Arial", size: 20) 
     label.textColor = UIColor.blackColor() 
     label.sizeToFit() 

     self.addSubview(label) 
     angle += step 
    } 
} 
+1

आपके लेबल के फ्रेम की उत्पत्ति इसके शीर्ष बाएं कोने है। यही कारण है कि आपका लेबल टेक्स्ट नीचे दाएं चतुर्भुज पर, और ऊपरी बाएं चतुर्भुज के अंदर दिखाई देता है। –

+1

एक एक्सएम फ्रेम – raki

+0

@PetahChristiani सेट करने के बाद, बस उन एक्स और वाई बिंदुओं को लेबल के केंद्र में सेट करें, धन्यवाद, मैं वास्तव में इसे भूल गया। –

उत्तर

10

आपका कोड ठीक काम कर रहा है, बस गणना तर्क गलत है:

enter image description here

यहाँ कोड है। आप फ्रेम बदलने या लेबल के center सेट करने से पहले label.center बजाय label.frame.origin, या

let label = UILabel() 
label.text = "\(index)" 
label.font = UIFont(name: "Arial", size: 20) 
label.textColor = UIColor.blackColor() 
label.sizeToFit() 
label.frame.origin.x = x - label.frame.midX 
label.frame.origin.y = y - label.frame.midY 

याद रखें सेट करने के लिए sizeToFit() की कोशिश करनी चाहिए। शुभ लाभ!

+1

संपादन के लिए धन्यवाद, तेजी से 'midX' और' midY' के बारे में नहीं पता था। –

+0

धन्यवाद @ फ़ैरी अज़ीमोव, @ लियो डाबस :) –

+1

https://developer.apple.com/library/prerelease/ios/samplecode/CircleLayout/Introduction/Intro.html नमूना कोड डाउनलोड करें और एक नज़र डालें। –

 संबंधित मुद्दे