2017-09-20 9 views
2

このような丸い円のビューのスタックを作成したいと思います。どのように素早くそのサブビューと共にUIViewビューを返すことができますか?

UIView stack UIViewsのこの全体のスタックを一度に戻したいと思います。だから私はこの方法で試しました。

open func setupCirclestack(parentFrame:CGRect)->UIView 
{ 
    let arrayColor=[UIColor.yellow,UIColor.blue,UIColor.red] 
    let baseCircle=Circle.init(frame: parentFrame) 
    baseCircle.backgroundColor=UIColor.purple 
    var parentview=baseCircle 
    // var existingFrame=baseCircle.frame 

    for i in 0...2//<CircleValues().numberOfCircles-1 
    { 
     let circle=self.getInnerCircle(currentFrame: parentFrame) 
     circle.backgroundColor=arrayColor[i] 
     parentview.addSubview(circle) 
     parentview=circle as! Circle 

     //existingFrame=circle.frame 

    } 

    return parentview 
} 

func getInnerCircle(currentFrame:CGRect)->UIView 
{ 
    CircleValues.sharedInstance.radius=CircleValues.sharedInstance.radius-30 
    print("New Radius------\(CircleValues.sharedInstance.radius)") 
    let circle=Circle.init(frame: currentFrame) 
    return circle 




} 

しかし、最後の(最も内側のビュー)ビューのみを取得できます。どのように私はそれはあなたがサブビューとして円を追加したparentViewの既存のオブジェクトを置き換えられますので、あなたは、forループの最後でparentView変数をreasign

答えて

1

すべての円のすべてのフレームがparentFrameと同じであるためです。

あなたのすべてのビューは追加されていますが、最後のビューは他のビューと重複しているため、見ることができます。

追加しているすべての子ビューに対して、forループの繰り返しごとにフレームサイズを小さくする必要があります。

for i in 0...2//<CircleValues().numberOfCircles-1 
{ 
    let circle=self.getInnerCircle(currentFrame: parentFrame) // decrease size(height and width) here every time to achieve result attached in screenshot in your question 
    circle.backgroundColor=arrayColor[i] 
    parentview.addSubview(circle) 
    parentview=circle as! Circle 

    //existingFrame=circle.frame 

} 
+0

すべてのビューを追加した後、私が親ビューをreturendした場合、私の全体のスタックが返されますか? – das

1

このメソッドからUIViewsのスタック全体を返すことができます。したがって、parentViewに格納されている最後の円オブジェクトを返します。

for i in 0...2//<CircleValues().numberOfCircles-1 
{ 
    let circle=self.getInnerCircle(currentFrame: parentFrame) 
    circle.backgroundColor=arrayColor[i] 
    parentview.addSubview(circle) 
    //parentview=circle as! Circle 

    //existingFrame=circle.frame 

} 
1

あなたは親ビュー内のビューを返したい場合は、このような何かにあなたの関数を変更する必要があります。

open func setupCirclestack(parentFrame:CGRect)->UIView 
    { 
     let arrayColor=[UIColor.yellow,UIColor.blue,UIColor.red] 
     let baseCircle=Circle.init(frame: parentFrame) 
     baseCircle.backgroundColor=UIColor.purple 
     var parentview=baseCircle 
     // var existingFrame=baseCircle.frame 

     for i in 0...2//<CircleValues().numberOfCircles-1 
     { 
      let circle=self.getInnerCircle(currentFrame: parentFrame) 
      circle.backgroundColor=arrayColor[i] 
      parentview.addSubview(circle) 

     } 

     return parentview 
    } 

しかし、あなたは、ビューの配列を返す必要がある場合は、この試してみてください。

open func setupCirclestack(parentFrame:CGRect)->[UIView] 
    { 
     let arrayColor = [UIColor.yellow,UIColor.blue,UIColor.red] 
     let baseCircle = Circle.init(frame: parentFrame) 
     baseCircle.backgroundColor=UIColor.purple 

     var circleArray = [Circle]() 

     for i in 0...2 
     { 
      let circle = self.getInnerCircle(currentFrame: parentFrame) 
      circle.backgroundColor = arrayColor[i] 

      circleArray.append(circle) 

     } 

     return circleArray 
    } 
関連する問題