如何更改在Storyboard

时间:2018-02-04 14:11:40

标签: ios user-interface uiview uiimageview swift4

我正在使用Swift 4创建一个iPhone应用程序来创建角色。

关于这个应用程序:在故事板上我创建了一些UIImageViews,它们在彼此之上呈现,代表角色的某些部分,如袜子,鞋子,裤子,衬衫。然后我在代码中组合所有这些图层以创建完整的角色。我在用户界面中有按钮来选择类别。选择类别后,我会在UICollectionView中显示角色可以佩戴的所有可能项目。然后,用户从该集合中选择一个项目,因此相应的图像会相应地更改。

问题:因为我已经使用故事板创建了这些UIImageViews,所以他们在渲染时已经有了一个订单。但有时项目必须以不同的顺序呈现。例如,有时候鞋子必须穿在紧身裤上,就像穿着紧身牛仔裤一样,而有时鞋子必须穿在裤子下面,就像穿着牛仔裤一样。有时,用户不希望将图层一直带到顶部,而是在某些特定图层之间。

我想让用户能够更改项目的渲染顺序或向上或向下移动它们。

解决这个问题的好方法是什么?

提前感谢您的答案。

2 个答案:

答案 0 :(得分:1)

UIView从头到尾呈现子视图。因此后面的子视图覆盖了前面的子视图。有几种方法可以更改子视图的顺序。您可以使用bringSubview(toFront:)

view.bringSubview(toFront: shoeView)

最后会渲染子视图shoeView,使其位于view的所有其他子视图之上。

如果要移动视图,可以使用insertSubview(_:at:)。如果视图始终是子视图,则只需将其移动到新索引。

答案 1 :(得分:0)

您必须以编程方式执行此操作,我认为最好的方法是将@IBOutlet保留到UIImageView个,然后在适当的时间将其顺序切换到superview.subviews - 视图使用它的子视图的顺序来确定渲染它们的顺序。

所以只是举一个简短的例子:

@IBOutlet var shoesImageView: UIImageView!
@IBOutlet var pantsImageView: UIImageView!

@IBAction func putShoesOnTop() {
    let superView = shoesImageView.superview!
    superView.bringSubview(toFront: shoesImageView)
}

@IBAction func putPantsOnTop() {
    let superView = pantsImageView.superview!
    superView.bringSubview(toFront: pantsImageView)
}