だから私は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 クラス] で使用されている「クラス」メッセージに相当する Swift が何であるか理解できませんか?
私はこれを数時間機能させようとしてきましたが、うまくいかないようです。どんな助けでも大歓迎です!
ありがとう