在UITextView上使用Alpha动画删除CAGradientLayer

时间:2019-01-08 10:53:02

标签: ios swift cagradientlayer

我在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 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

var docsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var photosPath = Path.Combine(docsPath, "DefectPhotos/");

        if(Directory.Exists(photosPath))
        {
            string[] photoNames = GetFileNames(photosPath, "*.jpg");

            foreach (var photoName in photoNames)
            {
                if (photoName.Contains(_item.DefectId))
                {
                    thumbnailPhotos.Add(new Thumbnail() { ImageUrl = photosPath + photoName });
                }
            }
        }

在这里以1作为持续时间来设置不透明度的动画,然后当它完成时,只需将其从其上层移除即可。