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

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

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

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

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

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

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

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

Я не видел ничего в примечаниях к выпуску об их удалении? Так что я немного застрял в том, что делать. Конечно, я пытался переписать строки, но три вещи, которые я использовал, больше не отображаются в качестве параметров. Если они только что вышли в последней версии 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)
    }

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

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)
Другие вопросы по тегам