2016-03-31 17 views
0

Swift uygulamasında yeniyim ve CGGradient kullanarak arka plan gradyanı oluşturmaya çalışıyorum ancak şu hatayı alıyorum., int türüne ilişkin değeri int türüne dönüştürülemiyor CGGradientDrawingOptions

Burada bir int kullanmak gerekiyordu değilim neden alamadım beklenen argüman tipi CGGradientDrawingOptions

int türü değerini dönüştüremezsiniz. Herhangi bir yardım takdir edilecektir.

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]) 

sizin özel durumda sadece boş seçeneği ayarlanmış geçmesi böylece, herhangi bir seçeneği istemiyoruz Xcode (Cmd + tıklama) '' CGGradientDrawingOptions' tanımına atla, bunun, 'CGGradientDrawingOptions .DrawsBeforeStartLocation' ve' CGGradientDrawingOptions .DrawsAfterEndLocation' ile Int32’den bir başlatıcı içeren bir enum olduğunu görürsünüz. – Kevin

cevap

0

sana okur satırda hata alıyorsanız varsayalım:

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

sorun burada 0 (bir tamsayı) geçiyoruz son parametredir.

bu rutin için beyanıdır:

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

Objective-C ise CGGradientDrawingOptions tip 0 hiçbir seçenek demektir bir tamsayı değerli şeydir. Swift'de çizim seçenekleri, OptionSetType türünde enum olarak bildirilmiştir. Derleyici, bu enumu beklediğinden ve bir tamsayıya sahip olmadığından şikayet ediyor.

Swift'de bu seçenekleri belirtme yolu bir diziye benziyor ya da enum öğelerinden öğeler içeriyor. Her iki DrawsBeforeStartLocation seçeneği istedi ve DrawsAfterEndLocation aşağıdakileri yazarsınız Yani eğer: Eğer varsa

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

Çok teşekkürler Scott işe yaradı! btw @Kevin İşlev tanımını okudum ve bu CGContextDrawLinearGradient (currentContext, degrade, startPoint, endPoint, [4,5]) 'kullanarak denedim ama yine de aynı hatayı attı. Bu yüzden ben şaşırdım ve bir dizi olmayan int geri döndü. – user3517759

+0

Swift'deki Enumlar, (genellikle) C veya Objective-C'deki gibi tamsayıları belirtmenin garip bir yolu değildir. Onlar, onları daha güçlü ve daha güvenli kılan farklı bir yaratıktır, ama bir şey yapmanın C yoluna alışmış olan "eski zamanlayıcılar" ı harekete geçirir. :-) –

+0

Ha Buna alışmam gerekecek :) – user3517759

İlgili konular