2012-07-17 15 views
5

में सबव्यूज़ व्यवस्थित करें मेरे पास मेरे ऐप में विचारों का एक समूह है। मैं उन्हें एक गोलाकार आकार में व्यवस्थित करना चाहता हूं और उपस्थित दृश्यों की संख्या के आधार पर अपना केंद्र बदलना चाहता हूं।आईओएस - परिपत्र आकार

तो, यदि 3 विचार हैं तो वे एक त्रिकोण की तरह दिखेंगे, लेकिन फिर भी एक सर्कल बनायेंगे। यदि 4 हैं तो यह एक वर्ग की तरह दिखता है लेकिन फिर भी एक सर्कल बनाता है, और इसी तरह ...

संक्षेप में, सभी विचारों के केंद्र एक काल्पनिक सर्कल पर बैठेंगे।

कोई सुझाव?

उत्तर

13

इस कोड को मैं अपनी परियोजनाओं में से एक में प्रयोग किया जाता है, आशा है कि यह मदद करता है।

// you must set both of these 
CGPoint centerOfCircle; 
float radius; 

int count = 0; 
float angleStep = 2.0f * M_PI/[arrayOfViews count]; 

for (UIView *view in arrayOfViews) { 
    float xPos = cosf(angleStep * count) * radius; 
    float yPos = sinf(angleStep * count) * radius; 
    view.center = CGPointMake(centerOfCircle.x + xPos, centerOfCircle.y +yPos); 
    count++; 
} 
+0

बढ़िया काम करता है .. !! – Shailesh

0

आप अपने विचारों की संख्या से एक सर्कल (360 डिग्री या 2π रेडियंस) की डिग्री विभाजित कर सकते हैं, फिर कोण और केंद्र से दूरी के आधार पर अपने केंद्रों को समायोजित कर सकते हैं।

यहाँ कुछ कार्यों मैं उपयोग करते हैं:

// These calculate the x and y offset from the center by using the angle in radians 
#define LengthDir_X(__Length__,__Direction__) (cos(__Direction__)*__Length__) 
#define LengthDir_Y(__Length__,__Direction__) (sin(__Direction__)*__Length__) 

// I use this to convert degrees to radians and back if I have to 
#define DegToRad(__ANGLE__) (((__ANGLE__) * 2.0 * M_PI)/360.0) 
#define RadToDeg(__ANGLE__) (((__ANGLE__) * 360)/(2.0 * M_PI)) 
0

यहाँ तर्क ऑफसेट के साथ एक UIView विस्तार के रूप में, स्वीकार किए जाते हैं जवाब की एक स्विफ्ट 3 संस्करण है:

public extension UIView { 
    public func distributeSubviewsInACircle(xOffset: CGFloat, yOffset: CGFloat) { 
     let center = CGPoint(x: self.bounds.size.width/2, y: self.bounds.size.height/2) 
     let radius: CGFloat = self.bounds.size.width/2 
     let angleStep: CGFloat = 2 * CGFloat(Double.pi)/CGFloat(self.subviews.count) 
     var count = 0 
     for subview in self.subviews { 
      let xPos = center.x + CGFloat(cosf(Float(angleStep) * Float(count))) * (radius - xOffset) 
      let yPos = center.y + CGFloat(sinf(Float(angleStep) * Float(count))) * (radius - yOffset) 
      subview.center = CGPoint(x: xPos, y: yPos) 
      count += 1 
     } 
    } 
} 
संबंधित मुद्दे