如何在swift中返回UIView视图及其子视图?

时间:2017-09-20 12:35:58

标签: ios swift 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




}

但我只能获得最后一个(最内层视图)视图。如何从此方法返回整个UIViews堆栈

3 个答案:

答案 0 :(得分:1)

您在for循环结束时重新设置了一个parentView变量,因此它将替换您在其中添加圆圈作为子视图的parentView的现有对象。因此,它将返回存储在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 :(得分:1)

如果要在父视图中返回视图,则需要将函数更改为以下内容:

lapply(rf1$fit$control$index, length)

但是如果您需要返回视图数组,请尝试以下方法:

    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
    }

答案 2 :(得分: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

}
相关问题