2015-07-09 6 views
8

Recentemente ho aggiornato a Xcode 7, beta 3.Errore: l'uso di identificatore irrisolto 'kCGBlendModeMultiply'

E io ho incontrato alcuni problemi, io non riesco a trovare tutte le domande per il SO.

Quando eseguo la mia applicazione, ottengo 3 errori:

Use of unresolved identifier 'kCGBlendModeMultiply'

Use of unresolved identifier 'kCGLineCapRound'

Use of unresolved identifier 'kCGLineJoinMiter'

Tuttavia le 2 queste ultime, scompaiono, anche se presumo che appariranno dopo che il primo è fissato (da qui il motivo per cui ho incluso in questa domanda).

Non ho visto nulla nelle note di rilascio su questi rimossi? Quindi sono un po 'bloccato su cosa fare. Ho provato a riscrivere le righe, ovviamente, ma le 3 cose che ho usato non appaiono più come opzioni. Nel caso in cui siano appena passati nell'ultimo Swift 2.0, cosa posso usare invece?

Ecco il codice per il primo errore.

func alpha(value:CGFloat)->UIImage 
{ 
    UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0) 

    let ctx = UIGraphicsGetCurrentContext() 
    let area = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height) 

    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -area.size.height) 
    CGContextSetBlendMode(ctx, kCGBlendModeMultiply) 
    CGContextSetAlpha(ctx, value) 
    CGContextDrawImage(ctx, area, self.CGImage) 

    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage; 
} 

Ecco il codice per i 2 ultimi errori:

for layer in [ self.top, self.middle, self.bottom ] { 
     layer.fillColor = nil 
     layer.strokeColor = UIColor.whiteColor().CGColor 
     layer.lineWidth = 4 
     layer.miterLimit = 4 
     layer.lineCap = kCALineCapRound 
     layer.masksToBounds = true 

     let strokingPath = CGPathCreateCopyByStrokingPath(layer.path, nil, 4, kCGLineCapRound, kCGLineJoinMiter, 4) 

     layer.bounds = CGPathGetPathBoundingBox(strokingPath) 

     layer.actions = [ 
      "strokeStart": NSNull(), 
      "strokeEnd": NSNull(), 
      "transform": NSNull() 
     ] 

     self.layer.addSublayer(layer) 
    } 

Qualsiasi aiuto sarebbe molto apprezzato! :)

risposta

15

Questo dovrebbe funzionare:

CGContextSetBlendMode(ctx, CGBlendMode.Multiply) 

... o anche solo questo:

CGContextSetBlendMode(ctx, .Multiply) 

Se Ctrl-click su CGContextSetBlendMode e poi dal suo salto di dichiarazione (allo stesso modo) per dichiarazione di CGBlendMode poi si vedrà:

enum CGBlendMode : Int32 { 

    /* Available in Mac OS X 10.4 & later. */ 
    case Normal 
    case Multiply 
    case Screen 
    case Overlay 

    // ... 
} 

Simila l'altra linea che produce l'errore dovrebbe essere cambiata in:

let strokingPath = CGPathCreateCopyByStrokingPath(layer.path, nil, 4, .Round, .Miter, 4) 
+0

Che ha funzionato perfettamente! Grazie mille! – MLyck