2015-11-08 11 views
0

Я использую третье лицо для выбора цвета (ISColorWheel-https://github.com/justinmeiners/ios-color-wheel), чтобы выбрать цвет и отобразить его на экране. Мне нужно ограничить выбор синего цвета, если определенная кнопка включена.Ограничение касания на ColorPicker UIView - iOS

enter image description here

Когда я вижу класс выбора цвета библиотеки, они внедрили следующий код, чтобы ограничить вид Ручки для перемещения по палитре цветов.

- (void)setTouchPoint:(CGPoint)point 
{ 
    CGFloat width = self.bounds.size.width; 
    CGFloat height = self.bounds.size.height; 

    CGPoint center = CGPointMake(width/2.0, height/2.0); 

    // Check if the touch is outside the wheel 
    if (ISColorWheel_PointDistance(center, point) < _radius) 
    { 
     //NSLog(@"Distance is %f and Radius is %f",ISColorWheel_PointDistance(center, point),_radius); 
     _touchPoint = point; 
    } 
    else 
    { 
     // If so we need to create a drection vector and calculate the constrained point 
     CGPoint vec = CGPointMake(point.x - center.x, point.y - center.y); 

     float extents = sqrtf((vec.x * vec.x) + (vec.y * vec.y)); 

     vec.x /= extents; 
     vec.y /= extents; 

     _touchPoint = CGPointMake(center.x + vec.x * _radius, center.y + vec.y * _radius); 
     NSLog(@"Touch Point is %f %f",_touchPoint.x,_touchPoint.y); 
    } 

    [self updateKnob]; 
} 

Приведенный выше код ограничивает возможность перемещения ручки в сторону от круга. В моем случае я должен запретить пользователю не выбирать синий цвет ColorPicker. Как я могу его реализовать. Как найти траекторию синего цвета.

ответ

1

Вы должны определить треугольник, который определяет цвет синий, как вы его видите (сколько зеленых доз он содержит в одной стороне, сколько фиолетовый на другой), тогда ищите вас точки внутри этого треугольника. Один из способов сделать это можно здесь: https://stackoverflow.com/a/9755252/1870192

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