繁体   English   中英

在Superview的范围内移动视图(iOS)

[英]Move view within superview's bounds (iOS)

在一个应用程序中,我试图将一个视图在另一个视图内移动到随机位置。 我已经能够做到这一点,如下所示:

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()以确保要移动的视图的边界/框不超过其父视图的范围/框架?

有没有办法做到这一点?

我认为应该像这样,最大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)

}

我认为您需要确保不要将较小的视图放得太远或太远(通过添加- (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))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM