2016-04-26 7 views
0

アプリでは、別のビュー内でランダムな位置にビューを移動しようとしています。私は次のようにこれを行うことができた:スーパービューの範囲内でビューを移動する(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()移動するビューの境界/枠がスーパービューの境界/フレームを超えないようにするにはどうすればよいですか?

これを行う方法はありますか?

答えて

2

は、私は私はそれを少し変更し、それができない

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) 

} 
+0

ありがとう、完璧な作品。 – Lkabo

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)) 
} 
+0

ありがとうmianView.frame.widthは、完璧に動作する必要があります。この最大randomXようにすべきだと思います。 – Lkabo

+0

初めて分割しないでください。 http://stackoverflow.com/a/36855212/5790492が優れています。 –

関連する問題