【问题标题】:Subview constraints for dragging用于拖动的子视图约束
【发布时间】:2014-05-18 15:33:11
【问题描述】:

调色板是添加到主故事板的视图。我用圆角半径来做一个圆。调色板内的小圆圈是在调色板视图内创建的子视图。小圆圈是可拖动的。问题是我可以将小圆圈拖到主圆圈(调色板)之外。

如何阻止小圆圈到达主圆圈(调色板)的边界后被拖动。

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    计算调色板中心点与选取器圆中心点之间的距离 (How to find the distance between two CG points?)

    添加选择器圆圈的半径,如果超过较大圆圈的半径,则您要停止拖动。

    更新:

    因此,如果距离 + R2 >= 半径 1,则您已到达圆的边缘并需要停止拖动

    更新2

    根据您在此处上传的示例项目是正确的代码...

    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    
        for (UITouch *touch in touches){
    
    
            CGPoint newPoint = [touch locationInView:self];
            newPoint.x -= startPoint.x;
            newPoint.y -= startPoint.y;
            CGRect frm = [picker frame];
            frm.origin = newPoint;
    
            CGFloat xDist = abs((newPoint.x + 15) - (self.center.x - self.frame.origin.x));
            CGFloat yDist = abs((newPoint.y + 15) - (self.center.y - self.frame.origin.y));
    
            CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
    
            if ((distance + 15) >= (self.frame.size.width /2)) {
                // EDGE REACHED SO DON'T UPDATE
            } else {
                [picker setFrame:frm];
            }
    
        }
    }
    

    如果框架仍在边界内并且您的距离计算没有考虑包含视图的偏移量,您只想更新框架

    HTH

    【讨论】:

    • 第二部分看不懂
    • @DivinePropotion 我已经添加了一些更新的内容
    • 我仍然很难做到这一点。您能否查看我的代码并让我知道我做错了什么。此代码放置在paletteView 类中。 paste.ubuntu.com/7494466
    • @DivinePropotion 快速浏览了几件事,使用视图的center 属性而不是计算它。你说过你的选择器是 30 x 30 那么半径应该是 15 而不是 18.75?调色板半径应为 137.5。还要输入一些NSLog 以查看您的积分是否匹配,例如如果选择器位于调色板的中心,它们的中心点是否相同? pickerVIew 是调色板的子视图吗?您可能需要根据调色板的原点调整选择器中心?
    • 通过调色板的原点调整选择器中心是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2018-01-10
    相关资源
    最近更新 更多