2016-04-14 3 views
0

Я хотел бы переместить позицию кнопки (X & Y) в пределах определенной области объекта вида.Xcode 7 Swift 2 - Перемещение в пределах определенной области просмотра

Что я сделал до сих пор, я добавил объект вида на свой главный экран, и я также добавил кнопку внутри представления, до сих пор ОК.

Теперь мне удалось получить границы объекта вида, и я знаю, что размер моей кнопки говорит (50x50). Так что я хочу, когда я нажимаю кнопку, он должен переместиться в другое случайное местоположение, но внутри объекта вида он не должен перемещаться за пределы границ объекта представления. Прямо сейчас то, что происходит в моей кнопке, похоже, перемещает часть его за пределы объекта просмотра на основе случайного X & Y.

Любая помощь будет оценена.

+0

Я сработал, чтобы это сделать. – Coolboylp

+0

Я пытаюсь выяснить то же самое, не могли бы вы разместить свое решение. – Lkabo

+0

@Lkabo Я скоро отправлю код, я собрал решение из сети. – Coolboylp

ответ

0

Мне тоже удалось получить его. Вот как я это сделал:

Я создал функцию, в которой передаю форму и возвращаю местоположение, в котором я хочу, чтобы кусок перемещался в пределах видимости.

func randomizeLocation(shape: CGRect) -> CGPoint { 


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



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

Просто говоря о координате х (левая/правая) Логика здесь в том, что arc4random_uniform возвращает случайное # от 0 до заданного числа (- 1).

Но вы не хотите, чтобы число начиналось с нуля, потому что это положило бы объект на край экрана слева на 1/2. Итак, если вы добавите 1/2 ширины к общей функции, вы никогда не уйдете в левую часть экрана.

Чтобы не уходить с правой стороны экрана, вы хотите получить максимальное число ширины экрана минус 1/2 от ширины объекта. Чтобы получить это, вы должны указать номер, который вы передаете функции arc4random, как минус целиком ширина формы, , потому что когда вы добавляете половину назад, вы смещаете на 1/2 ширины своего объекта с обеих сторон (минимальное и максимальное возвращаемое значение).

Так, чтобы использовать эту функцию, возьмите свой объект, позволяет сказать UILabel и установить его центр это функции приводит, как, например:

let myLabel = UIButton(type: .Custom) 
myLabel.frame = CGRectMake(100, 100, 100, 100) 
myLabel.center = randomizeLocation(myLabel.bounds) 

И что это. Btw, я не учитывал -1 в обратном b/c, я понял, что один пиксель был слишком незначителен, чтобы беспокоиться.