在一个应用程序中,我试图让一个视图在另一个视图中移动到一个随机位置。我能够做到如下:
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不超过其超级视图的边界/框架的位置?
有办法做到这一点吗?
答案 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))
}