我正在使用以下代码设置视图控制器的视图蒙版:
Dim iSrs As Long
For iSrs = ActiveChart.SeriesCollection.Count To ActiveChart.SeriesCollection.Count - 1 Step -1
ActiveChart.Legend.LegendEntries(iSrs).Delete
Next
ActiveChart.Legend.LegendEntries(1).Delete
然后我还使用以下代码来设置上方视图的scrollView子视图的蒙版:
view.mask = UIView(frame: view.frame)
view.mask?.backgroundColor = UIColor.black.withAlphaComponent(0.25)
view.isUserInteractionEnabled = false
不过,蒙版显示的完全不同(视图的蒙版比scrollView的蒙版要暗得多。有人知道为什么会发生这种情况吗?
答案 0 :(得分:0)
在上述问题中,您使用的是默认添加的view
,但如果要在已退出的scrollView中应用蒙版,则需要添加addsubview
方法,例如我在下面实现的方法,试试这个
scrollview.mask = UIView(frame: scrollview.frame)
scrollview.mask?.backgroundColor = UIColor.black.withAlphaComponent(0.25)
scrollview.isUserInteractionEnabled = false
scrollview.addSubview(scrollview.mask!)
答案 1 :(得分:0)
一些观察结果:
设置遮罩的frame
时,您不想使用视图的frame
。请改用bounds
。
视图的遮罩应放置在视图的坐标系中,bounds
是,而frame
不是。 frame
在超级视图的坐标系中定义。所以你想要:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
view.mask = UIView(frame: view.bounds)
view.mask?.backgroundColor = UIColor.black.withAlphaComponent(0.25)
}
如果您的视图恰好起源于0, 0
,则可能不会注意到使用frame
和bounds
的区别,但是前者是不正确的,如果出现以下情况,则会导致问题:视图从未出现在0, 0
。
请注意,我在viewDidLayoutSubviews
中进行了设置,以便在某些情况下触发了视图尺寸的更改时,也会相应地更新蒙版。您可能也正在这样做,但是我提一下是为了清楚。如果您恰巧是在UIView
子类(而不是UIViewController
子类)中进行此类操作,则可以在layoutSubviews
中进行。
滚动视图的mask
与滚动视图一起滚动。因此,如果该蒙版的高度是滚动视图的bounds
的高度,则在您滚动时,滚动视图的蒙版就会向上滚动,并且超出蒙版frame
的所有内容将根本不可见。 / p>
因此,您可以将遮罩的size
的{{1}}设置为滚动视图的frame
。或者我个人将蒙版添加到滚动视图的超级视图中,而不是添加到滚动视图本身)(以使蒙版不会滚动)。但是将滚动视图的掩码设置为滚动视图的contentSize
/ bounds
而不是其frame
的大小将无法实现您想要的效果。
您的问题不清楚,但是这两个同级/相邻视图是一个还是另一个子视图?如果是后者,则可能会出现问题。如果为视图设置蒙版(alpha值低于1),则该蒙版也将应用于其所有子视图。因此,如果具有0.25 alpha蒙版的视图的子视图具有自己的0.25 alpha蒙版,则该子视图将有效地以0.0625 alpha呈现。
但是这里是带有标签的文本视图和滚动视图,它们的alpha均为25%,并且一个视图不是另一个的子视图,并且效果很好:
话虽如此,我建议将alpha添加到一个普通的超级视图中,以解决滚动和遮罩遮罩的问题。