与addsubview一起使用时,UiView在多个图层上添加

时间:2015-09-24 06:10:22

标签: ios objective-c iphone uiview

我试图在主视图上添加UIViews,UIViews是具有重力动画的圆圈(球)。

enter image description here

这个问题是大多数时候视图被添加到不同的层上,比如这个,

enter image description here

有没有办法在主视图或其上的单个图层上添加所有这些UIViews(Circles),因为我需要在这些圈子上添加碰撞行为。

修改

这是我的UIView代码,

    lblTimer = [[UILabel alloc] initWithFrame:frameLabel];
    lblTimer.textColor = [UIColor redColor];
    lblTimer.text = @"0";
    
    //frameBall = CGRectMake(touchPoint.x-12.5, touchPoint.y-12.5, 25, 25);
    frameBall = CGRectMake(xCoordinate-12.5, yCoordinate-12.5, 25, 25);
    viewBall = [[UIView alloc] initWithFrame:frameBall];
    viewBall.layer.cornerRadius = 12.5;
    viewBall.backgroundColor = [UIColor yellowColor];
    //CGRect frameLabel = CGRectMake(touchPoint.x, touchPoint.y, 25, 25);
    
    [viewBall addSubview:lblTimer];
    [self.view addSubview:viewBall];

2 个答案:

答案 0 :(得分:1)

1。一个视图=一个层

但你想要的是是所有视图层都有相同的父图层,他们已经在上面的代码中做了 - 它可能看起来不同,因为模拟器试图在非重叠的方式。

如果您真的希望X视图共享一个图层而不仅仅是一个超级图层,那么您运气不好而只是改变您的方法:)

答案 1 :(得分:0)

每次添加视图时,它都会添加到视图层次结构的顶部。这是因为当两个视图发生碰撞时,其中一个必须位于顶部。您捕获的视图层次结构有些偏颇,因为如果您以不重叠的方式添加球,我很确定它们看起来像是在同一层上。

添加碰撞的方法是尝试检查正在移动的视图是否在另一个视图子视图中:

for (UIView *anotherView in self.subviews) {
    if (movingView == anotherView)
        continue;
    if (CGRectIntersectsRect(movingView.frame, anotherView.frame)) {
        // Do something
    }
}