2014-05-18 30 views
0

调色板是一视图添加到主情节串连图板。我用拐角半径做了一个圆圈。调色板内的小圆圈是在调色板视图内创建的子视图。小圆圈是可拖动的。问题是我可以拖动主圆圈外的小圆圈(调色板)。子视图constaints

如何停止从被拖动的小圈,一旦它到达主圆(调色板)的边界。

enter image description here

回答

1

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

添加上拾取器圆的半径,并且如果超出的半径大圈,那么你想停止拖动。

UPDATE:

enter image description here

因此,如果距离+ R2为> =半径1你已经达到圈子的边缘,必须阻止他们拖着

UPDATE2

根据您上载这里的样本项目是正确的代码...

- (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

+0

我不明白的第二部分 –

+0

@DivinePropotion我已经添加了一些更多的绘制更新 – Flexicoder

+0

我仍然很难实现这一点。你能否检查我的代码,让我知道我做错了什么。这段代码放在paletteView类中。 http://paste.ubuntu.com/7494466/ –