2012-07-17 17 views
5

Uygulamamda bir grup görüntüm var. Bunları yuvarlak bir şekilde düzenlemek ve mevcut görüşlerin sayısına bağlı olarak merkezlerini değiştirmek istiyorum.iOS - Yuvarlak şekillerde alt görünümleri düzenleme

Yani, 3 görünüm varsa bunlar bir üçgen gibi görünür, ancak yine de bir daire oluşturur. 4 varsa, bir kare gibi görünebilir ama yine de bir daire oluşturur, ve böylece ...

Özetle, tüm görüşlerin merkezleri hayali bir çember üzerinde oturacaktı.

Herhangi bir öneriniz var mı?

cevap

13

Bu benim projelerden biri kullanılan koddur yardımcı olur umarım:

Burada kullandığım bazı fonksiyonlar.

// 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

büyük İşleri .. !! – Shailesh

0

Bir dairenin derecelerini (360 derece veya 2π radyan) sahip olduğunuz görüntü sayısına bölebilir, ardından merkezlerini açı ve mesafeye göre ayarlayabilirsiniz. ,

// 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

Burada argümanları ofset ile bir UIView uzantısı olarak kabul cevabın bir Swift 3 sürümü:

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 
     } 
    } 
} 
İlgili konular