用于拖动的子视图约束
Posted
技术标签:
【中文标题】用于拖动的子视图约束【英文标题】:Subview constraints for dragging 【发布时间】:2014-05-18 15:33:11 【问题描述】:调色板是添加到主故事板的视图。我用圆角半径来做一个圆。调色板内的小圆圈是在调色板视图内创建的子视图。小圆圈是可拖动的。问题是我可以将小圆圈拖到主圆圈(调色板)之外。
如何阻止小圆圈到达主圆圈(调色板)的边界后被拖动。
【问题讨论】:
【参考方案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 是调色板的子视图吗?您可能需要根据调色板的原点调整选择器中心?
通过调色板的原点调整选择器中心是什么意思?以上是关于用于拖动的子视图约束的主要内容,如果未能解决你的问题,请参考以下文章
如何检测拖动到那里的子视图中的触摸(或获取哪个子视图位于其父视图中的点击下方的最快方法)