ユーザーがマスター ビューからアイテムを選択し、それを詳細ビューにドラッグして配置できる場合、分割ビュー コントローラーを使用しています。ユーザーがドラッグしている間、詳細ビューの下部に UIView が表示され、ドラッグ中に気が変わってアイテムを削除したい場合は、アイテムをドラッグできます。タッチが削除する UIView にあるときを検出するのに問題があります。これが私がこれまでに持っているものです:
ユーザーがマスター コントローラーでアイテムを選択したときに実行されるコード。
マスタービューコントローラー:
// Create pointer to window
UIWindow *window = [UIApplication sharedApplication].delegate.window;
// Create draggable view
self.draggableImageView = [[UIImageView alloc] initWithImage:imageView.image];
// Adapt to orientation
[self.draggableImageView rotateToOrientation:[[UIApplication sharedApplication] statusBarOrientation]];
// Hide detail calloutview if there is one
[self.detailViewController hideCalloutView:NO];
// Add drag-view to window
CGPoint location = [gesture locationInView:gesture.view.window];
[self.draggableImageView setCenter:location];
[window addSubview:[self draggableImageView]];
// Animate the marker to jump up
[UIView animateWithDuration:0.10
delay:0
options:UIViewAnimationOptionCurveEaseIn
animations:^{
// Move the marker up
[self.draggableImageView setCenter:CGPointMake(location.x + 75.0f, location.y)];
} completion:^(BOOL finished) {
}];
// Show our remove marker view
[self.detailViewController showRemoveMarkerView];
ユーザーがドラッグしている間、詳細ビュー コントローラーのメソッドが更新されたポイントで呼び出され、これがそのメソッド内のコードです。
- (void)pointForMarkerDidChange:(UIImageView *)imageView atPoint:(CGPoint)point
{
NSLog(@"Point for Marker Did Change, point = %@", NSStringFromCGPoint(CGPointMake(point.x - 75.0f, point.y)));
UIWindow *window = [UIApplication sharedApplication].delegate.window;
CGRect removeMarkerFrame = [window convertRect:self.removeMarkerView.frame fromView:self.view];
if (CGRectContainsPoint(removeMarkerFrame, point)) {
NSLog(@"YES");
}
}
編集:次のコードを変更したところ、現在は機能しています。
- (void)pointForMarkerDidChange:(UIImageView *)imageView atPoint:(CGPoint)point
{
UIWindow *window = [UIApplication sharedApplication].delegate.window;
CGRect removeMarkerFrame = [self.removeMarkerView convertRect:self.removeMarkerView.round.frame toView:self.view];
CGPoint point2 = [window convertPoint:point toView:self.view];
if (CGRectContainsPoint(removeMarkerFrame, point2)) {
NSLog(@"YES");
}
}