我正在使用在 ImageView 中绘制的圆形渐变作为我的颜色选择器的色轮。我想将平移手势识别器的 shouldReceiveTouch: 限制在渐变的位置,以便 View 的其余部分不受平移手势识别器的影响。
如何指定与渐变半径匹配的圆形边界?
编辑:我尝试了以下代码但没有效果:
if (sender.numberOfTouches)
{
CGSize size = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height/3);
float radius = MIN(size.width, size.height)/2;
[alphaSlider addTarget:self actionselector(changeOpacity forControlEvents:UIControlEventValueChanged];
[hellSlider addTarget:self actionselector(changeBrightness forControlEvents:UIControlEventValueChanged];
[saturationSlider addTarget:self actionselector(saturate forControlEvents:UIControlEventValueChanged];
[rSlider addTarget:self actionselector(redSlider forControlEvents:UIControlEventValueChanged];
[gSlider addTarget:self actionselector(greenSlider forControlEvents:UIControlEventValueChanged];
[bSlider addTarget:self actionselector(blueSlider forControlEvents:UIControlEventValueChanged];
CGPoint lastPoint = [sender locationOfTouch: sender.numberOfTouches - 1 inView: gradientView];
CGPoint center = CGPointMake((size.width/2), (size.height /2));
CGPoint delta = CGPointMake(lastPoint.x - center.x, lastPoint.y - center.y);
CGFloat angle = (delta.y == 0 ? delta.x >= 0 ? 0 : M_PI : atan2(delta.y, delta.x));
angle = fmod(angle, M_PI * 2.0);
angle += angle >= 0 ? 0 : M_PI * 2.0;
if((lastPoint.x - center.x) + (lastPoint.y - center.y)/2 < radius)
{
UIColor *color = [UIColor colorWithHue: angle / (M_PI * 2.0) saturation:saturationSlider.value brightness:hellSlider.value alpha:alphaSlider.value];
if ([color getRed: &r green: &g blue:&b alpha: &a])
{
NSLog(@"Color value - R : %g G : %g : B %g", r*255, g*255, b*255);
}
float red = r;
float green = g;
float blue = b;
rText.text = [NSString stringWithFormat"%.0f",rSlider.value];
gText.text = [NSString stringWithFormat"%.0f",green*255];
bText.text = [NSString stringWithFormat"%.0f",blue*255];
colorView.backgroundColor = [UIColor colorWithRedrText.text.floatValue/255) greengText.text.floatValue/255) bluebText.text.floatValue/255) alpha:alphaSlider.value];
rSlider.value = red*255;
gSlider.value = green*255;
bSlider.value = blue*255;
alphaText.text = [NSString stringWithFormat"%.2f",alphaSlider.value];
brightnessText.text = [NSString stringWithFormat:@"%.2f",hellSlider.value];
saturationText.text = [NSString stringWithFormat:@"%.2f",saturationSlider.value];
}
}
}
它似乎在渐变的右侧工作并停止接收颜色更新,左侧和下侧仍在更新。我需要适当限制 panGesture 以使其停止干扰我的 UISliders 。
有什么想法吗?
Best Answer-推荐答案 strong>
您只需要对触摸事件进行点击测试,看看它是否在圆圈的区域内。为此,您需要知道圆的中心点及其半径。
这个现有问题涵盖了这样做的一般方程式:
Equation for testing if a point is inside a circle
关于ios - 将平移手势识别器限制为特定圆圈,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/17566704/
|