我设法得到它。这是我是如何做到这一点的:
我创建了一个函数,它将形状传递给我并返回要移动到位于视图范围内的位置。
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)
而且它。顺便说一句,我没有考虑到-1在回报b/c我觉得一个像素太不重要了,以免打扰..
我已经管理完成它。 – Coolboylp
我试图找出完全相同的东西,你可以请你发布你的解决方案。 – Lkabo
@Lababo我很快就会发布代码,我从网上收集了解决方案。 – Coolboylp