ios - 使 UILabel 或 UITextView 的最后几行快速淡出。请检查所附图片

标签 ios swift uilabel uitextview fadeout

<分区>

enter image description here

如何做这样的控制?

最佳答案

这是我所做的:

  • 我创建了一个 UIView,它具有我选择的高度、textView 的尾随、前导和底部约束。这是我的 gradientView,我还用它来添加其他控件,例如“阅读更多”按钮。
  • 在 viewDidLayoutSubviews() 中,我为 gradientView 创建了一个渐变层。 (请注意,您需要在创建图层之前删除该图层或确保它只添加一次,否则每次调用 viewDidLayoutSubviews 时您的渐变都会变暗)
  • 当我的文本发生变化时,我通过检查 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 中时显示

xcode - Swift (Xcode) 中带有标签蒙版的多色渐变

ios - 等待一定时间后向用户发送通知

ios - 如何使用 RxSwift 检测双击

ios - 如何使用 MVVM/RxSwift 根据来自其他单元格的值更新 tableview 的单元格?