如何知道一个视图在Ios中触及其他视图

时间:2016-01-19 06:13:07

标签: ios animation view touch

我想知道我的观点何时在任何位置This Is Image That Give You Better Idea About The My Proble

互相接触

先谢谢你。

5 个答案:

答案 0 :(得分:1)

您可以使用UIKit Dynamics。 在viewController中添加以下行。

UIDynamicAnimator* animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];

UICollisionBehavior* collision = [[UICollisionBehavior alloc] initWithItems:@[view1]];


[animator addBehavior:collision];

// add a boundary that coincides with the top edge
CGPoint topEdge = CGPointMake(view2.frame.origin.x +
                            view2.frame.size.width, view2.frame.origin.y);

[collision addBoundaryWithIdentifier:@"view2"
                        fromPoint:view2.frame.origin
                          toPoint:topEdge];

现在在你的viewcontroller中添加这个委托 UICollisionBehaviorDelegate 并设置 collision.collisionDelegate = self;

您可以通过以下方法获取碰撞通知

- (void)collisionBehavior:(UICollisionBehavior *)behavior beganContactForItem:(id<UIDynamicItem>)item 
        withBoundaryIdentifier:(id<NSCopying>)identifier atPoint:(CGPoint)p {
NSLog(@"Boundary contact occurred - %@", identifier);
}

答案 1 :(得分:0)

试试这可能会对你有所帮助。 您可以使用CGRectIntersectsRect检查两个视图是否相互交叉。

-(BOOL)isView: (UIView *) view1 IntersectsWithOtherView:(UIView*)view2 {

if(CGRectIntersectsRect(view1.frame, view2.frame)){

    return YES;
}
return NO;
}

答案 2 :(得分:0)

您可以检查两个视图的帧是否相交:

FVC

答案 3 :(得分:0)

试试这个 -

CGRect bounds1 = [view1 convertRect:view1.bounds toView:nil];
CGRect bounds2 = [view2 convertRect:view2.bounds toView:nil];
BOOL viewsOverlap = CGRectIntersectsRect(bounds1, bounds2);

答案 4 :(得分:0)

您需要启动计时器,您需要在其中检查视图的框架。

[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkIntersect) userInfo:nil repeats:NO];

检查以下方法

-(void) checkIntersect {

    CGRect f1 = [view1.layer.presentationLayer frame];
    CGRect f2 = [view2.layer.presentationLayer frame];

    if (CGRectIntersectsRect(f1, f2)) {
        NSLog(@"intersect both view");
    }
    else{
        [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(checkIntersect) userInfo:nil repeats:NO];
    }
}

不要忘记处理你的计时器,这样当动画完成时它应该停止调用这个方法。有很多方法可以解决这个问题。