0

ユーザーがマスター ビューからアイテムを選択し、それを詳細ビューにドラッグして配置できる場合、分割ビュー コントローラーを使用しています。ユーザーがドラッグしている間、詳細ビューの下部に 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");
    }
}
4

0 に答える 0