我正在制作一款不使用Autolayout的游戏,并且已经使用约束来扩展所有内容并且它完美运行。但是我似乎无法弄明白这一点,我使用arc4random在4.7英寸的屏幕上随机定位UIButton的X和Y坐标。当我尝试在较小的屏幕上运行它时,它有时会将UIButton从屏幕上绘制出来。如何根据屏幕大小上下调整arc4random。
-(void)position{
Randompositionx = arc4random() %270;
Randompositionx = Randompositionx + 51;
Randompositiony = arc4random() %411;
Randompositiony = Randompositiony +163;
UIButton.center = CGPointMake(Randompositionx, Randompositiony);
}
答案 0 :(得分:1)
你应该使用arc4random_uniform而不是arc4random和模运算符。它给出的数字没有“模偏差”。
您需要根据屏幕大小调整随机数的上限值。 T_77的回答是朝着正确方向迈出的一步,但仍然不对。
以下代码假定您要移动的按钮名为myButton。
它使用的边缘值为20左右。根据需要更改值。
编辑:我更新了它,以便在位置计算中使用按钮的高度和宽度。使用更新的代码,即使按钮大小发生变化,按钮也不应该比边距值更靠近任何边缘。也没有神奇的数字。它应该适应它的超视图的大小。
-(void)position
{
CGRect frame = myButton.superview.bounds;
CGFloat leftMargin = 20; //use whatever values you want for magins
CGFloat rightMargin = 20;
CGFloat topMargin = 20;
CGFloat bottomMargin = 20;
CGFloat randomX, randomY;
CGFloat xMax = frame.size.width-leftMargin-rightMargin-
button.bounds.size.width/2;
randomX = arc4random_uniform(xMax) + leftMargin;
CGFloat yMax = frame.size.height-topMargin-bottomMargin-
button.bounds.size.height/2;
randomY = arc4random_uniform(yMax) + topMargin;
myButton.center = CGPointMake(randomX, randomY);
}
另请注意,如果您使用自动布局,则不应直接移动按钮的位置,而应该具有位置约束并修改其常量,然后调用layoutIfNeeded。否则,导致布局更改的第一件事将导致您的按钮恢复到之前的位置。
答案 1 :(得分:0)
试试这个
-(void)position{
CGRect frame = [self.view frame];
Randompositionx = arc4random() %270;
Randompositionx = Randompositionx + CGRectGetMinX(frame);
Randompositiony = arc4random() %411;
Randompositiony = Randompositiony +CGRectGetMinY(frame);
UIButton.center = CGPointMake(Randompositionx, Randompositiony);
}
现在,您可以在视图中定位UIButton。