根据不同的屏幕尺寸缩放arc4random

时间:2015-02-28 01:10:37

标签: ios objective-c xcode uibutton arc4random

我正在制作一款不使用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);


}

2 个答案:

答案 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。