2015-04-22 5 views
0

Я различные CAShapeLayers, что у каждого есть отличительный цвет, сделал так:Как получить цвет пикселя при касании (Swift)?

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?

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

+0

Сначала вы должны выяснить, на котором CAShapeLayer дело, с CGPathContainsPoint, а затем ju проверить цвет этого слоя –

+0

К сожалению, у моих CAShapeLayers все одинаковые пути (так как они все сектора одного круга), а это значит, что CGPathContainsPoint не будет предоставлять уникальный CAShapeLayer. Есть ли другой способ? – John

ответ

0

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

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 
} 
+0

Будет ли это работать с 'strokeColor' CAShapeLayer' (не только' fillColor')? – John

+0

Это должно работать для любого цвета на экране, который является видимым. –

+0

И вы бы использовали простое выражение 'if' для сравнения двух цветов? – John

Смежные вопросы