答案 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];
}
}
不要忘记处理你的计时器,这样当动画完成时它应该停止调用这个方法。有很多方法可以解决这个问题。