Как получить цвет пикселя на ощупь (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
}