在superview的界限内移动视图(iOS)

时间:2016-04-26 00:20:20

标签: ios swift

在一个应用程序中,我试图让一个视图在另一个视图中移动到一个随机位置。我能够做到如下:

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 个答案:

答案 0 :(得分: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)

}

答案 1 :(得分: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))
}