2016-04-14 37 views
0

我想在视图对象的特定区域内移动按钮的位置(X & Y)。Xcode 7 Swift 2 - 在特定视图区域内移动按钮

到目前为止我所做的是,我在主屏幕上添加了一个视图对象,并且在视图中还添加了一个按钮,至此确定。

现在,我设法得到视图对象的边界,我知道我的按钮的大小说(50x50)。所以我想要的是,当我点击按钮时,它应该移动到另一个随机位置,但在视图对象内,它不应该移动到视图对象边界之外。现在在我的按钮中发生了什么似乎是基于随机X & Y将它的一部分移动到视图对象之外。

任何帮助将不胜感激。

+0

我已经管理完成它。 – Coolboylp

+0

我试图找出完全相同的东西,你可以请你发布你的解决方案。 – Lkabo

+0

@Lababo我很快就会发布代码,我从网上收集了解决方案。 – 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)) 
} 

只是在谈论的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我觉得一个像素太不重要了,以免打扰..

相关问题