Я пытаюсь установить uiviews одним нажатием кнопки. Я также добавил Gravity & Поведение при столкновении с использованием динамики UIKit. Проблема, которую вы видите на изображении (http://pho.to/7nVJI), - это самый нижний самый зеленый блок, а блок поверх этого, кажется, перекрывается. Вот метод ViewDidLoad: `- (void) viewDidLoad { [super viewDidLoad]; // Выполняйте какие-либо дополнительные настройки после загрузки представления, как правило, из наконечника.UIViews Overlap после добавления поведения Gravity and Collision
UIButton *moveIt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
moveIt.frame = CGRectMake(200, 50, 70, 30);
[moveIt addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:moveIt];
moveIt.titleLabel.text = @"Hit it";
moveIt.titleLabel.textColor = [UIColor whiteColor];
moveIt.backgroundColor = [UIColor blueColor];
UIButton *addBlockButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
addBlockButton.frame = CGRectMake(20, 50, 70, 30);
[addBlockButton addTarget:self action:@selector(addBlock:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:addBlockButton];
addBlockButton.backgroundColor = [UIColor orangeColor];
animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
newBlockYCoordiante = self.view.bounds.size.height-BLOCKHEIGHT;
UIView *basicBlock = [[UIView alloc] initWithFrame:CGRectMake(64, newBlockYCoordiante, BLOCKWIDTH, BLOCKHEIGHT)];
basicBlock.layer.borderWidth = 1;
basicBlock.tag = 100;
basicBlock.layer.borderColor = [UIColor greenColor].CGColor;
basicBlock.backgroundColor = [UIColor clearColor];
[self.view addSubview:basicBlock];
newBlockYCoordiante = newBlockYCoordiante - BLOCKHEIGHT;
if (collisonBehaviour == nil) {
collisonBehaviour = [[UICollisionBehavior alloc] initWithItems:@[basicBlock]];
collisonBehaviour.translatesReferenceBoundsIntoBoundary = YES;
collisonBehaviour.collisionDelegate = self;
[animator addBehavior:collisonBehaviour];
}
if (gBehaviour == nil) {
gBehaviour = [[UIGravityBehavior alloc] initWithItems:@[basicBlock]];
[animator addBehavior:gBehaviour];
}
} `
А вот как я добавляю новые блоки поверх предыдущих блоков:
- (void) addBlock :(id)sender
{
UIView *basicBlock = [[UIView alloc] initWithFrame:CGRectMake(64, newBlockYCoordiante, BLOCKWIDTH, BLOCKHEIGHT)];
basicBlock.layer.borderWidth = 1;
basicBlock.layer.borderColor = [UIColor orangeColor].CGColor;
basicBlock.backgroundColor = [UIColor clearColor];
[self.view addSubview:basicBlock];
newBlockYCoordiante = newBlockYCoordiante - BLOCKHEIGHT;
[gBehaviour addItem:basicBlock];
[collisonBehaviour addItem:basicBlock];
}
Как я гарантировать, что эти блоки не перекрываются, а до укладки. Это перекрытие вызывает еще одну проблему, когда я добавляю другую башню, подобную этой, рядом с ней справа, и добавляю поведение пота к зеленому блоку, чтобы переместить его вправо, вместо того, чтобы перемещать только соседний блок со второй башни, он также перемещает вторую последнюю блок от 2-й башни. Любые указатели/помощь оцениваются. Заранее спасибо :).
Это перекрытие не происходит, когда я просто добавляю представления друг к другу, не добавляя при этом поведение гравитации/столкновения. – DesignThought