0

だから私は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 が何であるか理解できませんか?

私はこれを数時間機能させようとしてきましたが、うまくいかないようです。どんな助けでも大歓迎です!

ありがとう

4

1 に答える 1

0

layerClass()クラス メソッドをオーバーライドし、クラスを返す必要があります。

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

ある時点で、gradientLayerプロパティをに設定することも必要になるでしょうself.layer

于 2014-10-23T04:36:24.520 に答える