当UIScrollView中有更多数据需要滚动时,有没有办法在底部和顶部淡化文本?我是否必须在UIScrollView中的UILabel上放置一些东西以获得该效果?
答案 0 :(得分:4)
您可以在顶部和底部使用CAGradientLayer
。您可以根据滚动视图的scrollViewDidScroll:
在委托方法contentOffset
中添加/删除此内容。
答案 1 :(得分:0)
您可以将ImageView添加为滚动视图的子视图,其中包含透明的png。
答案 2 :(得分:0)
您可以使用Core Animation轻松淡入淡出视图。请参阅适用于iOS的视图编程指南的Animations部分,了解您可以轻松制作动画的内容。甚至还有一个动画alpha属性的例子(清单4-1)。
答案 3 :(得分:0)
我尝试在Swift中实施Deepak的建议。
我认为会是这样的,
class MyViewController: UIViewController, UIScrollViewDelegate {
@IBOutlet weak var textView: UITextView! ///< the scrolling text
let gradientLayer = CAGradientLayer()
var yEnd : CGFloat = 1
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidLayoutSubviews() {
yEnd = CGFloat(textView.bounds.height) / CGFloat(textView.contentSize.height)
gradientLayer.frame = CGRect(x: 0, y: 0, width: textView.contentSize.width, height: textView.contentSize.height)
gradientLayer.locations = [0, 0.2, 0.8, 1]
gradientLayer.opaque = false
gradientLayer.opacity = 1
gradientLayer.startPoint = CGPoint(x: 0, y: 0)
gradientLayer.endPoint = CGPoint(x: 0, y: yEnd)
scrollOrigin = textView.bounds.origin.y
// scroll to the top of the text. It will trigger scrollViewDidScroll
textView.setContentOffset(CGPoint(x: 0,y: 0), animated: false)
textView.layer.mask = gradientLayer
}
func scrollViewDidScroll(scrollView: UIScrollView) {
// move the CALayer as we scroll, otherwise the fade will be scrolled away
let lineHeight : CGFloat = 20
let yOffset = CGFloat(scrollView.contentOffset.y) / CGFloat(scrollView.bounds.height)
let yBottom = lineHeight - (textView.contentSize.height - scrollView.contentOffset.y - scrollView.bounds.height)
gradientLayer.startPoint = CGPoint(x: 0, y: yOffset * yEnd)
gradientLayer.endPoint = CGPoint(x: 0, y: (1 + yOffset) * yEnd)
// change the alpha on top to fully visible on start of text
let alphaTop = yOffset > 0 ? yOffset < 0.2 ? 5 * (0.2 - yOffset) : 0 : 1
let alphaBottom = yBottom > 0 ? yBottom / lineHeight : 0
gradientLayer.colors = [
UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: alphaTop).CGColor,
UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0).CGColor,
UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0).CGColor,
UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: alphaBottom).CGColor
]
}
}
这个问题是我发现渐变更新有些延迟,所以它并不完全顺利。