CAGradientLayer,没有很好地调整大小,在旋转SWIFT时撕裂



所以我正在开发一个用Swift编写的iOS应用程序,我遇到了与此完全相同的问题:

CAGradientLayer的大小调整不好。

我在UIView中添加了一个CAGradientLayer,并覆盖willAnimateRotationToInterfaceOrientation以更新渐变边界。这似乎只在旋转完成后更新,因此在旋转时可以看到原始帧的边界(这会导致用户看到我的应用程序的白色背景)。

这是我的代码:

在viewDidLoad中,我有以下代码:

    var color1: UIColor = UIColor(red: CGFloat(0.12), green: CGFloat(0.13), blue: CGFloat(0.70), alpha: CGFloat(1.0))
    var color2: UIColor = UIColor(red: CGFloat(0.00), green: CGFloat(0.59), blue: CGFloat(1.00), alpha: CGFloat(1.0))
    var color3: UIColor = UIColor(red: CGFloat(0.00), green: CGFloat(1.00), blue: CGFloat(1.00), alpha: CGFloat(1.0))
    let gradient : CAGradientLayer = CAGradientLayer()
    let arrayColors: [AnyObject] = [color1.CGColor, color2.CGColor, color3.CGColor]
    gradient.frame = self.view.bounds
    gradient.colors = arrayColors
    view.layer.insertSublayer(gradient, atIndex: 0)

并且我覆盖这个功能:

    override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
        var gradient:CAGradientLayer = self.view.layer.sublayers[0] as CAGradientLayer
        gradient.frame = self.view.bounds
    }

解决方案似乎是这样的:

// GradientView.h
@interface GradientView : UIView
@property (nonatomic, strong, readonly) CAGradientLayer *layer;
@end
// GradientView.m
@implementation GradientView
+ (Class)layerClass {
    return [CAGradientLayer class];
}
@end

但我真的很难把这个类转换成Swift。有人能帮我吗?到目前为止,我有这个:

import Foundation
import UIKit
class GradientView:UIView
{
    var gradientLayer:CAGradientLayer = CAGradientLayer()
    func layerClass() -> CAGradientLayer {
        return gradientLayer.self
    }
}

但它似乎不起作用。我不明白【CAGradientLayer class】中使用的"class"消息的Swift等价物是什么?

我已经试着做了几个小时了,但我似乎还是做不到。任何帮助都将不胜感激!

感谢

您需要重写layerClass()类方法,并返回一个类:

class GradientView: UIView {
    override class func layerClass() -> AnyClass {
        return CAGradientLayer.self
    }
}

在某些情况下,您还需要将gradientLayer属性设置为self.layer

最新更新