• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 将平移手势识别器限制为特定圆圈

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:30:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用在 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-推荐答案


您只需要对触摸事件进行点击测试,看看它是否在圆圈的区域内。为此,您需要知道圆的中心点及其半径。

这个现有问题涵盖了这样做的一般方程式:

Equation for testing if a point is inside a circle

关于ios - 将平移手势识别器限制为特定圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17566704/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap