私は、ドラッグアンドドローのコードを非常にシンプルにしています。ビュー内のビューをドラッグして、それを制限する
3つのビュー:ルートビューは、基本的にはいくつかのインターフェイスコントロールを備えたウィンドウです。 その中に「キャンバス」のビューがあります。キャンバスビュー内には、ユーザーがキャンバス内を「ドラッグ」するための第3のビュー(文字の小さなグラフィック)があります。ドラッグはうまく動作します。
問題は、私がキャンバスの境界内で自分の「文字」を制約するように見えないことです。理想的には、彼がキャンバスの端にぶつかると、彼は停止する必要があります(ルートビューにこぼれることはありません)。
キャンバスビューはサブビューをクリップします。だから彼は一度彼が端を越えて消える - しかし私は彼が消えないようにしたい、私は彼がそれ以上行くことができないようにしたい。
また、アニメーションの前にCGRectIsWithinRectを呼び出すこともできます。原則としてこのトリックを行う必要があります。問題は、アニメーションが実行されている間にキャラクターのフレームが更新されないことです。既に移動している間は、ページの右側に移動し続けます。
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UIView * charView = [[canvasView floatingView] retain];
CGPoint pt = [[touches anyObject] locationInView:canvasView];
if (CGRectContainsPoint([canvasView bounds], pt)) {
CGRect charFrame = charView.frame;
CGRect containerFrame = canvasView.frame;
BOOL inTheYard= CGRectContainsRect(containerFrame, charFrame);
if (inTheYard == NO) {
//if we're at the edge, don't go any further
return;
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration:.2];
CGFloat x = floatingView.center.x + (pt.x - startPoint.x);
CGFloat y = floatingView.center.y + (pt.y - startPoint.y);
CGPoint middle = CGPointMake(x,y);
floatingView.center = middle;
[UIView commitAnimations];
[floatingView release];
}
}
私は彼がスーパービューの端を越えて移動しないようにするにはどうすればよいですか?