所以我正在开发一个用Swift编写的iOS应用程序,我遇到了与此完全相同的问题:
CAGradientLayer not resizing nicely.
我向我的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'消息的Swift等价是什么?
我一直在努力让这项工作持续几个小时,而我似乎无法得到它。任何帮助将非常感谢!
由于
答案 0 :(得分:0)
您需要覆盖layerClass()
类方法,并返回一个类:
class GradientView: UIView {
override class func layerClass() -> AnyClass {
return CAGradientLayer.self
}
}
在某些时候,您还需要将gradientLayer
属性设置为self.layer
。