Ошибка: использование неразрешенного идентификатора «kCGBlendModeMultiply»

Недавно я обновился до Xcode 7, бета 3.

И я столкнулся с некоторыми проблемами, я не могу найти никаких вопросов по SO.

Когда я запускаю свое приложение, я получаю 3 ошибки:

Использование неразрешенного идентификатора «kCGBlendModeMultiply»

Использование неразрешенного идентификатора «kCGLineCapRound»

Использование неразрешенного идентификатора «kCGLineJoinMiter»

Однако 2 последних исчезают, хотя я предполагаю, что они появятся после того, как первый будет исправлен (поэтому я включил его в этот вопрос).

Я ничего не видел в примечаниях к выпуску об их удалении? Так что я немного застрял в том, что делать. Конечно, я попытался переписать строки, но 3 вещи, которые я использовал, больше не отображаются в качестве вариантов. В случае, если они просто исчезли в последней версии Swift 2.0, что я могу использовать вместо этого?

Вот код первой ошибки.

    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;
}

Вот код для двух последних ошибок:

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

Любая помощь будет принята с благодарностью! :)


person MLyck    schedule 09.07.2015    source источник


Ответы (1)


Это должно работать:

CGContextSetBlendMode(ctx, CGBlendMode.Multiply)

... или даже просто это:

CGContextSetBlendMode(ctx, .Multiply)

Если вы выполните Ctrl-click на CGContextSetBlendMode, а затем перейдете от его объявления (таким же образом) к объявлению CGBlendMode, то вы увидите:

enum CGBlendMode : Int32 {

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

    // ...
}

Точно так же другую строку, которая вызывает ошибку, следует изменить на:

let strokingPath = CGPathCreateCopyByStrokingPath(layer.path, nil, 4, .Round, .Miter, 4)
person 0x416e746f6e    schedule 09.07.2015