2016-03-31 27 views
0

私はSwiftを初めて使用しています。CGGradientを使用して背景グラデーションを作成しようとしていますが、次のエラーが発生します。int型の値を期待される引数型CGGradientDrawingOptionsに変換できません

は、私はここにint型を使用することになっていない午前、なぜ私は得ることはありません期待引数の型CGGradientDrawingOptions

にint型の値を変換することはできません。どんな助けもありがとう。

override func viewDidLoad() { 
    super.viewDidLoad() 
    var currentContext = UIGraphicsGetCurrentContext() 
    CGContextSaveGState(currentContext); 
    var colorSpace = CGColorSpaceCreateDeviceRGB() 

    var topColor = UIColor(red: (57/255.0), green: (150/255.0), blue: (199/255.0), alpha: 1) 
    var startColorComponents = CGColorGetComponents(topColor.CGColor) 

    var middleColor = UIColor(red: (90/255.0), green: (60/255.0), blue: (117/255.0), alpha: 0.85) 
    var middleColorComponents = CGColorGetComponents(middleColor.CGColor) 

    var bottomColor = UIColor(red: (215/255.0), green: (109/255.0), blue: (109/255.0), alpha: 1) 
    var endColorComponents = CGColorGetComponents(bottomColor.CGColor) 

    var colorComponents 
     = [startColorComponents[0], startColorComponents[1], startColorComponents[2], startColorComponents[3], 
      middleColorComponents[0], middleColorComponents[1], middleColorComponents[2], middleColorComponents[3], 
       endColorComponents[0], endColorComponents[1], endColorComponents[2], endColorComponents[3] 
      ] 

    var locations:[CGFloat] = [0.0, 0.35, 1.0] 

    var gradient = CGGradientCreateWithColorComponents(colorSpace,&colorComponents,&locations,3) 

    var startPoint = CGPointMake(-0.3, 0.1) 
    var endPoint = CGPointMake(0.2, 1.3) 

    CGContextDrawLinearGradient(currentContext,gradient,startPoint,endPoint, 0) 

    CGContextRestoreGState(currentContext); 

}

+0

CGContextDrawLinearGradient(someContext, <other arguments here> [.DrawsBeforeStartLocation, .DrawsAfterEndLocation]) 

をあなたの特定のケースでは、単に空のオプションセットを渡すので、あなたはどちらのオプションを望んでいませんXcode(CGI +クリック)の 'CGGradientDrawingOptions'の定義にジャンプすると、' CGGradientDrawingOptions.DrawsBeforeStartLocation'とCG32radientDrawingOptions.DrawsAfterEndLocation'という値を持つ列挙型であることがわかります。 – Kevin

答えて

0

私はあなたが読みライン上のエラーを得ていると仮定します。

CGContextDrawLinearGradient(currentContext,gradient,startPoint,endPoint, 0) 

をここでの問題は、あなたが0を渡している、あなたの最後のパラメータ(整数)です。

このルーチンの宣言がある:Objective-Cで

public func CGContextDrawLinearGradient(c: CGContext?, 
    _ gradient: CGGradient?, 
    _ startPoint: CGPoint, 
    _ endPoint: CGPoint, 
    _ options: CGGradientDrawingOptions) 

CGGradientDrawingOptionsタイプ0はオプションを意味していない整数値のものです。スウィフトでは、描画オプションは、OptionSetTypeenumと宣言されています。コンパイラは、この列挙型を期待していて整数ではないので不平を言っています。

Swiftでこれらのオプションを指定する方法は、配列のように見えるか、enumから要素を含むセットになります。あなたは両方のDrawsBeforeStartLocationオプションを望んでいたとDrawsAfterEndLocationあなたが書くでしょうもしそうなら:あなたがいる場合

CGContextDrawLinearGradient(currentContext,gradient,startPoint,endPoint, []) 
+0

ありがとうScottはそれが働いた! btw @Kevin関数の定義を読んで、この ' CGContextDrawLinearGradient(currentContext、gradient、startPoint、endPoint、[4,5])'を使ってみましたが、それでも同じエラーが発生しました。だから、私はうんざりして、非配列intに戻った。 – user3517759

+0

SwiftのEnumはCやObjective-Cのような整数を指定する奇妙な方法ではありません。彼らは彼らをより強力で安全にする別の獣ですが、Cのやり方に慣れ親しんだ「昔の人」を逃がします。 :-) –

+0

ハ私はこれに慣れる必要があります:) – user3517759

関連する問題