Как получить цвет пикселя на ощупь (Swift)?

У меня есть различные CAShapeLayers что у каждого есть отличительный цвет, сделанный так:

    shape1.strokeColor = UIColor(red: 85/255.0, green: 176/255.0, blue: 112/255.0, alpha: 1.0).
    shape2.strokeColor = UIColor(red: 222/255.0, green: 171/255.0, blue: 66/255.0, alpha: 1.0).CGColor

Используя touchesBegan функция, я хочу определить, является ли CAShapeLayer был прослушан, и какой именно он был, для того, чтобы произошло соответствующее действие. Я знаю, что можно использовать hitTest а также CGPathContainsPoint, но я хочу использовать другой метод. Как сравнить цвет точки, выбранной с цветом CAShapeLayers?

Любая помощь будет оценена

1 ответ

Этот метод должен работать для определения цвета пикселя точки касания:

func colorAtPoint(point:CGPoint) -> UIColor
{
    var pixels = UnsafeMutablePointer<CUnsignedChar>.alloc(4)

    var colorSpace = CGColorSpaceCreateDeviceRGB()
    var bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.rawValue)
    var context = CGBitmapContextCreate(pixels, 1, 1, 8, 4, colorSpace, bitmapInfo)

    CGContextTranslateCTM(context, -point.x, -point.y)

    shapeLayer.renderInContext(context)


    var color:UIColor = UIColor(red: CGFloat(pixels[0])/255.0, green: CGFloat(pixels[1])/255.0, blue: CGFloat(pixels[2])/255.0, alpha: CGFloat(pixels[3])/255.0)

    pixels.dealloc(4)

    return color
}
Другие вопросы по тегам