使用单个UIView屏蔽多个iOS UIView

时间:2016-05-18 15:07:12

标签: ios swift uiview

是否有可能让UIView成为多于1个视图的maskedView?我在以下UIViews上设置了maskView,但只有最后一个保留了掩码设置。

    imageOne.maskView = viewMask
    labelThing.maskView = viewMask
    labelOtherThing.maskView = viewMask
    labelLastThing.maskView = viewMask
    labelMaskThis.maskView = viewMask //the only masked view

对此进行排查,我注释掉了最后一行,并确认了我的怀疑。

    imageOne.maskView = viewMask
    labelThing.maskView = viewMask
    labelOtherThing.maskView = viewMask
    labelLastThing.maskView = viewMask //now gets the mask
    //labelMaskThis.maskView = viewMask 

我的viewMask: UIView是否有办法应用于多个视图?

1 个答案:

答案 0 :(得分:3)

看起来答案是否定的,您不能使用相同的UIView实例来屏蔽多个视图:显然,屏蔽视图的图层正在集成到视图的图层层次结构中被蒙面了。

最好的方法是为您要屏蔽的每个视图创建一个新的UIView蒙版实例。或者,您可以通过NSKeyedArchiver复制现有视图:

let archivedData = NSKeyedArchiver.archivedDataWithRootObject(viewMask)
let viewMaskCopy = NSKeyedUnarchiver.unarchiveObjectWithData(archivedData) as! UIView

虽然我建议您首先以实例化viewMask的方式创建新的屏蔽视图实例。

您还可以将屏蔽的视图分组到故事板中的UIView中,然后将蒙版应用于该视图。