<分区>
如何做这样的控制?
最佳答案
这是我所做的:
textView.contentSize.height > textView.frame.height
来确定是否应该显示 gradientView 这里有一个 Playground 的例子
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
var gradientView: UIView?
var gradient:CAGradientLayer?
override func loadView() {
let view = UIView()
view.backgroundColor = .gray
let textView = UITextView()
textView.frame = CGRect(x: 20, y: 20, width: 200, height: 300)
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse eu gravida ligula, vitae venenatis felis. Suspendisse volutpat posuere pretium. Pellentesque quis quam ac velit tincidunt egestas. Phasellus sed scelerisque augue, interdum luctus eros. Praesent non augue eu enim dignissim convallis. Nunc commodo eros quis quam euismod, a malesuada ipsum mattis. Sed sit amet ipsum in justo dictum rutrum a sit amet sem. Sed sit amet mi vel nulla ornare congue. Nam elit ante, aliquam id consequat ac, pretium vel augue. Vivamus hendrerit commodo lectus, vel feugiat mi tempus non. Donec porta, ipsum id porttitor sodales, tortor lectus porta lacus, quis blandit turpis enim at libero. Donec ante est, rutrum quis malesuada a, accumsan at tortor. Nam molestie commodo nulla non suscipit. Nullam pellentesque nunc quam, vitae tempus turpis sollicitudin id. Integer vel varius urna, eleifend eleifend diam."
textView.textColor = .black
view.addSubview(textView)
let gradientViewFrame = CGRect(x:textView.frame.origin.x, y: textView.frame.origin.y + textView.frame.height - 100, width: textView.frame.width, height: 100)
gradientView = UIView(frame:gradientViewFrame)
view.addSubview(gradientView!)
self.view = view
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
gradient?.removeFromSuperlayer()
gradient = gradientView?.gradientBackground(from:.white, to: UIColor.white.withAlphaComponent(0), direction: .bottomToTop)
}
}
enum GradientDirection {
case leftToRight
case rightToLeft
case topToBottom
case bottomToTop
}
extension UIView {
func gradientBackground(from color1: UIColor, to color2: UIColor, direction: GradientDirection) -> CAGradientLayer {
let gradient = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = [color1.cgColor, color2.cgColor]
switch direction {
case .leftToRight:
gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
case .rightToLeft:
gradient.startPoint = CGPoint(x: 1.0, y: 0.5)
gradient.endPoint = CGPoint(x: 0.0, y: 0.5)
case .bottomToTop:
gradient.startPoint = CGPoint(x: 0.5, y: 1.0)
gradient.endPoint = CGPoint(x: 0.5, y: 0.0)
case .topToBottom:
gradient.startPoint = CGPoint(x: 0.5, y: 0.0)
gradient.endPoint = CGPoint(x: 0.5, y: 1.0)
default:
break
}
self.layer.insertSublayer(gradient, at: 0)
return gradient
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
关于ios - 使 UILabel 或 UITextView 的最后几行快速淡出。请检查所附图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299672/
相关文章:
swift - 是否禁止协议(protocol)类型的 inout 变量?
ios - 如何改变IOS UILabel中某个句子的颜色?
ios - 使用 scrollRangeToVisible() 时,UITextView 总是从头开始滚动
ios - ios 如何从另一个应用程序调用一个应用程序的方法?
swift - 如何在 tvOS 中将外部 .vtt 字幕文件添加到 AVPlayerViewController
ios - UILabel 仅在放置在 viewcontroller 的 viewDidAppear 中时显示