2

複数の画像ビューがあるスクロール ビューがあり、パン ジェスチャを適用して画像ビューをドラッグし、他のビューに追加しています。問題は、スクロール ビューをスクロールしようとすると、最初にパン ジェスチャが認識され、スクロール ビューからスクロールではなくパン アクションが呼び出されることです。これはパンのための私のコードです

-(void)move:(UIPanGestureRecognizer *)sender
{

    [[baseView superview]  bringSubviewToFront:baseView]; //sender.view];

    [hatScroll setScrollEnabled:NO];

    // We pass in the gesture to a method that will help us align our touches so that the pan and pinch will seems to originate between the fingers instead of other points or center point of the UIView
    [self adjustAnchorPointForGestureRecognizer:sender];

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {

        if ([[[sender view] superview] superview] == itemView || [[[sender view] superview] superview] == itemView_iphone5) // adds the imageview in the item scroll
        {
            int tag = [[sender view] tag] / 100;
            UIScrollView *tempScroll;

            if (window.bounds.size.height != 568)
                tempScroll = (UIScrollView *)[itemView viewWithTag:-tag];
            else
                tempScroll = (UIScrollView *)[itemView_iphone5 viewWithTag:-tag];
            CGRect frame = CGRectFromString([itemFrameDict objectForKey:[NSString stringWithFormat:@"%i",[[sender view] tag]]]);

            CGAffineTransform transform = temp.transform;
            UIImageView *tempImageView =  [[UIImageView alloc] initWithImage: [(UIImageView *) [sender view] image]];
            tempImageView.tag = [[sender view] tag];
            tempImageView.frame = frame;
            [tempImageView setTransform:transform];
            [tempImageView setFrame:frame];
            [tempImageView setUserInteractionEnabled:YES];
            [tempScroll addSubview:tempImageView];

            UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
            panRecognizer.cancelsTouchesInView = NO;
            panRecognizer.delaysTouchesBegan = NO;
            panRecognizer.delaysTouchesEnded = NO;
            [panRecognizer setDelegate:self];
            [tempImageView addGestureRecognizer:panRecognizer];
        }
    }

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateChanged)
    {
        CGPoint translatedPoint = [sender locationInView:[[sender view] superview]] ;
        newTranslatedPoint = [[[sender view] superview] convertPoint:translatedPoint toView:baseView];

        if (window.bounds.size.height != 568)
        {
            if ([sender view].frame.size.width == 35 && [sender view].frame.size.height == 35)
                [[sender view] sizeToFit];
        }
        else
        {
            if ([sender view].frame.size.width == 45 && [sender view].frame.size.height == 45)
                [[sender view] sizeToFit];
        }


        [sender view].center =  CGPointMake(newTranslatedPoint.x, newTranslatedPoint.y);

        [baseView addSubview:[sender view]];
    }

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
    {

        [hatScroll setScrollEnabled:YES];

        [self.view insertSubview:baseView atIndex:2];



        CGPoint newPoint;
        if (window.bounds.size.height != 568)
            newPoint = [[[sender view] superview] convertPoint:newTranslatedPoint toView:itemView];
        else
            newPoint = [[[sender view] superview] convertPoint:newTranslatedPoint toView:itemView_iphone5];

        if (newPoint.y < 0)
        {

            UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];
            [pinchRecognizer setDelegate:self];
            [[sender view] addGestureRecognizer:pinchRecognizer];

            UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
            [rotationRecognizer setDelegate:self];
            [[sender view] addGestureRecognizer:rotationRecognizer];


        }

        else if (newPoint.y > 0)
        {

            int tag = [[sender view] tag] / 100;

            UIScrollView *tempScroll;

            if (window.bounds.size.height != 568)
                tempScroll = (UIScrollView *)[itemView viewWithTag:-tag];
            else
                tempScroll = (UIScrollView *)[itemView_iphone5 viewWithTag:-tag];

            CGRect frame = CGRectFromString([itemFrameDict objectForKey:[NSString stringWithFormat:@"%i",[[sender view] tag]]]);

            CGAffineTransform transform = temp.transform;
            [[sender view] setTransform:transform];
            [[sender view] setFrame:frame];
            [tempScroll addSubview:[sender view]];

        }
    }
}

何か案は?どうすればこれを入手できますか。上記のコードでお気軽に質問してください。

4

1 に答える 1

2

長押しジェスチャを使用して、スクロールビューからその特定のアイテムをドラッグしてみてください

于 2013-03-19T08:54:21.117 に答える