我想在视图对象的特定区域内移动按钮的位置(X& Y)。
到目前为止我所做的是,我已经在我的主屏幕上添加了一个视图对象,并且我还在视图中添加了一个按钮,到目前为止还可以。
现在,我设法获得了视图对象的边界,我知道按钮的大小说(50x50)。所以我想要的是,当我点击按钮时,它应该移动到另一个随机位置,但在视图对象内,它不应移动到视图对象边界之外。现在,我的按钮中发生的事情似乎是根据随机X&amp ;;将其中一部分移动到视图对象之外。是的。
任何帮助将不胜感激。
答案 0 :(得分: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))
}
刚谈到x坐标(左/右) 这里的逻辑是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)
就是这样。顺便说一句,我没有考虑返回b / c中的-1,我认为这个像素太微不足道了,无法理解......