在 UITextView 上删除带有 alpha 动画的 CAGradientLayer

Posted

技术标签:

【中文标题】在 UITextView 上删除带有 alpha 动画的 CAGradientLayer【英文标题】:Remove CAGradientLayer with alpha animation on UITextView 【发布时间】:2019-01-08 10:53:01 【问题描述】:

我在UITextView 上有一个底部淡出渐变层。当用户到达UIScrollView 的底部时,我将删除此淡出。但是,当用户开始滚动到顶部时,我再次设置它。

我的问题是我想用 alpha 动画删除这个 CAGradientLayer 而不仅仅是直接删除它。

现在我正在移除并设置它(没有动画):

func scrollViewDidScroll(_ scrollView: UIScrollView) 
    updateGradientFrame()
    if (scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height) 
           self.myTextView.layer.mask = nil
    else
        myTextView.layer.mask = gradient
    

我试过但没有用:

UIView.animate(withDuration: 1) 
   self.myTextView.layer.mask = nil

再试一次(这会将动画添加到整个 UITextView 而不仅仅是图层):

let flash = CABasicAnimation(keyPath: "opacity")
flash.fromValue = 1.0
flash.toValue = 0.0
flash.duration = 3.0 // 1 second
flash.autoreverses = false // Back

gradient.add(flash, forKey: "flashAnimation")

我在社区发现的(不是直接指这个问题):

Animating a CALayer's mask size change

Animate CALayer mask change with fade effect

【问题讨论】:

【参考方案1】:

这样的事情呢?

UIView.animate(withDuration: 1, animations: 
        yourLayer.opacity = 0
    , completion: 
        yourLayer.removeFromSuperLayer()
    )

在这里,您使用 1 作为持续时间为不透明度设置动画,然后当它完成时,您只需将其从其超层中移除。

【讨论】:

以上是关于在 UITextView 上删除带有 alpha 动画的 CAGradientLayer的主要内容,如果未能解决你的问题,请参考以下文章

SWIFT iOS - 从多行 uitextview 获取带有换行符的文本,因为它们在屏幕上可见

UITextView 应该避免删除 html 标签

iOS 7 + Calabash:带有 NSLinkAttributeName 的 UITextView 和链接上的可访问性不起作用

在 uitextfield 和 uitextview 上添加内阴影

解除键盘后,带有所选文本的UITextView不响应触摸

UITextView带有可点击链接但没有文字突出显示