3

如何确定两个 uiviewimages 是否相交。我想做一个自动捕捉功能。当小图像与大图像相交或靠近它时(让我们说距离<= x),我希望小图像在它们相交的点自动捕捉(连接)到大图像。

4

3 回答 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 回答