ドラッグして描画するための非常に単純なコードがあります。
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];
}
}
彼がスーパービューの端を通り過ぎないようにするにはどうすればよいですか?