Playground,无法将同一个 UIImageView 设置为多个 UIView

Posted

技术标签:

【中文标题】Playground,无法将同一个 UIImageView 设置为多个 UIView【英文标题】:Playground, unable to set same UIImageView to more than one UIView 【发布时间】:2017-03-29 08:06:51 【问题描述】:

我有这个代码

    override public func viewDidLoad() 

    let imageBlankCard = UIImage(named: "BlankCard.png")
    let imageViewBlankCard = UIImageView(image: imageBlankCard)

    rockCard.addSubview(imageViewBlankCard)
    scissorCard.addSubview(imageViewBlankCard)
    paperCard.addSubview(imageViewBlankCard)

    self.view.addSubview(rockCard)
    self.view.addSubview(scissorCard)
    self.view.addSubview(paperCard)


但是当我运行 Playground 时,只有最新的 UIView (paperCard) 正确显示,其他卡片根本没有显示,如图here:应该有两张像最后一张一样的卡片,代替箭头。 有人能帮我吗?谢谢大家!

【问题讨论】:

【参考方案1】:

根据documentation,

视图只能有一个超级视图。如果视图已经有一个父视图并且该视图不是接收者,则此方法会在将接收者设为新的父视图之前删除先前的父视图。

这解释了你得到的行为。

对此的一种解决方案是创建三个单独的图像视图并将它们中的每一个添加为子视图。

从变量名称来看,我认为您正在创建类似于石头剪刀布游戏的东西。你有三个视图,每个视图都包含一个带有空白卡片图像的图像视图。并且您想将石头、纸和剪刀的图像作为叠加层添加到图像视图中。如果这就是你想要做的,为什么不直接将rockCardpaperCardscissorsCard 设置为UIImageViews 并将图像设置为BalnkCard.png

let imageBlankCard = UIImage(named: "BlankCard.png")
rockCard.image = imageBlankCard
scissorsCard.image = imageBlankCard
paperCard.image = imageBlankCard

【讨论】:

谢谢!将卡片设置为 UIImageView 而不是 UIView 太明显了,该死!非常感谢,伙计,问题解决了。

以上是关于Playground,无法将同一个 UIImageView 设置为多个 UIView的主要内容,如果未能解决你的问题,请参考以下文章

带有 UIImage 的 Swift Playgrounds

Swift – Balloons.playground – 无法将“纹理”添加到时间线

Playground 执行失败:错误:无法查找符号

如何将 UIButton 添加到 Swift Playground?

在我想使用的 GraphQL Playground 中设置测试标头会导致“无法访问服务器”

RxSwift - Playground 执行失败:无法查找符号