淡出任何接近UIScollView边缘的内容
正如标题所说,我试图给一些UIImageView一个淡出效果,因为他们越来越接近我的UIScrollView的四个边缘的任何一个。 由于用户可以拖动UIImages,如果他拖动边缘,它们开始淡出,而不是像UIScrollView边框一样给出这种效果。 我试过这个教程:
build议在另一个堆栈溢出的问题,但它只能应用于UITableViews。 我希望图像在离边界一厘米处开始消失。
与链接到Cocoanetics的post相似,您可以创build一个CAGradientLayer
来覆盖您的滚动视图。 使用滚动视图的背景颜色(在我的示例中为白色)将其淡入到左侧,右侧,顶部和底部边缘:
CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor; CGColorRef outerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor; // first, define a horizontal gradient (left/right edges) CAGradientLayer* hMaskLayer = [CAGradientLayer layer]; hMaskLayer.opacity = .7; hMaskLayer.colors = [NSArray arrayWithObjects:(id)outerColor, (id)innerColor, (id)innerColor, (id)outerColor, nil]; hMaskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:0.15], [NSNumber numberWithFloat:0.85], [NSNumber numberWithFloat:1.0], nil]; hMaskLayer.startPoint = CGPointMake(0, 0.5); hMaskLayer.endPoint = CGPointMake(1.0, 0.5); hMaskLayer.bounds = self.scrollView.bounds; hMaskLayer.anchorPoint = CGPointZero; CAGradientLayer* vMaskLayer = [CAGradientLayer layer]; // without specifying startPoint and endPoint, we get a vertical gradient vMaskLayer.opacity = hMaskLayer.opacity; vMaskLayer.colors = hMaskLayer.colors; vMaskLayer.locations = hMaskLayer.locations; vMaskLayer.bounds = self.scrollView.bounds; vMaskLayer.anchorPoint = CGPointZero; // you must add the masks to the root view, not the scrollView, otherwise // the masks will move as the user scrolls! [self.view.layer addSublayer: hMaskLayer]; [self.view.layer addSublayer: vMaskLayer];
免责声明:这种做法可以将四个angular落的渐变/淡化加倍。 你可以看看结果,并决定他们是否足够适合你。 如果没有,你也可以尝试在Photoshop中绘制一个透明的图像,并使用你绘制的图像在顶部添加一个UIImageView
子视图作为蒙版。
Youtube屏幕截图
奈特答案的迅捷版本,但只限于顶部和底部:
let innerColor = UIColor(white: 1.0, alpha: 0.0).CGColor let outerColor = UIColor(white: 1.0, alpha: 1.0).CGColor; // define a vertical gradient (up/bottom edges) let colors = [outerColor, innerColor,innerColor,outerColor] let locations = [0.0, 0.15,0.85,1.0] var vMaskLayer : CAGradientLayer = CAGradientLayer()// layer]; // without specifying startPoint and endPoint, we get a vertical gradient vMaskLayer.opacity = 0.7 vMaskLayer.colors = colors; vMaskLayer.locations = locations; vMaskLayer.bounds = self.scrollView.bounds; vMaskLayer.anchorPoint = CGPointZero; // you must add the mask to the root view, not the scrollView, otherwise // the masks will move as the user scrolls! self.view.layer.addSublayer(vMaskLayer)
这个问题上的几个post在这里:
更改UIScrollView中的alpha
为UIView设置Alpha是UIScrollVIew的子视图,速度非常慢
和一些示例代码在这里:
https://gist.github.com/MaximKeegan/2478842
如果你想以自己的方式,那么首先得到UIScrollView的可见部分:
获取UIScrollView内容的可见性
然后淡入UIView:
UIView具有渐变或模糊效果的边框