如何确定两个 uiviewimages 是否相交。我想做一个自动捕捉功能。当小图像与大图像相交或靠近它时(让我们说距离<= x),我希望小图像在它们相交的点自动捕捉(连接)到大图像。
问问题
2318 次
3 回答
2
CGRect bigframe = CGRectInset(bigView.frame, -padding.x, -padding.y);
BOOL isIntersecting = CGRectIntersectsRect(smallView.frame, bigFrame);
于 2012-06-01T13:13:04.037 回答
1
您可以使用 CGRectIntersectsRect 方法来检查帧:
if (CGRectIntersectsRect(myImageView1.frame, myImageView2.frame))
{
NSLog(@"intersected")
}
于 2012-06-01T13:13:54.833 回答
1
前两张海报已经走上了正轨CGRectIntersectsRect
。
BOOL isIntersecting = CGRectIntersectsRect(smallImage.frame, largeImage.frame);
if(isIntersecting){
//Animate the Auto-Snap
[UIView beginAnimation:@"animation" context:nil];
[UIView setAnimationDuration:0.5];
smallImage.frame = largeImage.frame;
[UIView commitAnimations];
}
基本上这就是说,如果两个图像相交,则小图像帧会在 0.5 秒内捕捉到较大的图像。不过,您不必对其进行动画处理;您可以通过删除除smallImage.frame = largeImage.frame;
. 但是,我推荐动画方式。希望这可以帮助。
- - - -编辑 - - - -
您可以使用以下代码:
BOOL isIntersecting = CGRectIntersectsRect(smallImage.frame, largeImage.frame);
if(isIntersecting){
//Animation
[UIView beginAnimation:@"animation" context:nil];
[UIView setAnimationDuration:0.5];
smallImage.center = CGPointMake(largeImage.center.x, largeImage.center.y);
//If you want to make it like a branch, you'll have to rotate the small image
smallImage.transform = CGAffineTransformMakeRotation(30);
//The 30 is the number of degrees to rotate. You can change that.
[UIView commitAnimations];
}
希望这可以解决您的问题。如果这有帮助,请记住投票并选择答案。
--------编辑--------- 最后一件事。我说“30”CGAffineTransformMakeRotation(30)
代表30度,但这是不正确的。CGAffineTransformMakeRotation 函数采用弧度为单位的参数,所以如果你想要 30 度,你可以这样做:
#define PI 3.14159265
CGAffineTransformMakeRotation(PI/6);
于 2012-06-02T04:49:49.340 回答