2016-04-26 2 views
0

В приложении Я пытаюсь перемещать представление в другом представлении в случайное местоположение. Я был в состоянии сделать это следующим образом:Переместить представление в границах супервизора (iOS)

mySmallerView.center = randomizeLocation() 

func randomizeLocation() -> CGPoint { 
    let randomX = arc4random_uniform(UInt32(mainView.frame.width)) 
    let randomY = arc4random_uniform(UInt32(mainView.frame.height)) 

    return CGPointMake(CGFloat(randomX), CGFloat(randomY)) 
} 

Это перемещает его вокруг довольно хорошо, но он использует центр, так что иногда, слева от экрана, или справа, сверху и/или снизу уходит экран, потому что его центр может нажимать пределы рамки представления.

Как бы я мог улучшить randomizeLocation() там, где это обеспечило бы, чтобы BOUNDS/FRAME вида, который нужно переместить, не превышали границы его рамки?

Есть ли способ сделать это?

ответ

2

я думаю, что это должно быть, как это максимальное randomX не должен иметь возможность быть mianView.frame.width

func randomizeLocation() -> CGPoint { 

    let randomX = arc4random_uniform(UInt32(mainView.frame.width - (mySmallerView.frame.width))) + (mySmallerView.frame.width/2) 
    let randomY = arc4random_uniform(UInt32(mainView.frame.height - (mySmallerView.frame.height))) + (mySmallerView.frame.height/2) 

} 
+0

Спасибо, работает отлично. – Lkabo

1

Я думаю, вам нужно убедиться, что вы не ставите слишком маленький вид слишком далеко или вниз (добавив - (mySmallerView.frame.width/2)). Вы также хотите, чтобы вы не заходили слишком далеко влево или вверх (добавив + (mySmallerView.frame.width/2)).

func randomizeLocation() -> CGPoint { 

    let randomX = arc4random_uniform(UInt32(mainView.frame.width - (mySmallerView.frame.width/2))) + (mySmallerView.frame.width/2) 
    let randomY = arc4random_uniform(UInt32(mainView.frame.height - (mySmallerView.frame.height/2))) + (mySmallerView.frame.height/2) 

    return CGPointMake(CGFloat(randomX), CGFloat(randomY)) 
} 
+0

Спасибо, отлично работает, я изменил его немного. – Lkabo

+0

Мы не должны делить первый раз. http://stackoverflow.com/a/36855212/5790492 лучше. –

Смежные вопросы