(iphone) чувствительность uiScrollView? - PullRequest
1 голос
/ 31 января 2011

У меня есть 2 вопроса на uiscrollview.

Первый вопрос:

У меня есть просмотры изображений на uiscrollview (внизу экрана), и пользователи могут перетаскивать изображение из вида uiscroll.
Я помещаю пальцы поверх imageView, чтобы вытащить его, но uiscrollview берет прикосновения и прокручивает.

Полагаю, мне нужно, чтобы imageView сначала получил событие касания (если событие касания произошло в imageView)
Если направление пальца почти горизонтальное, задайте событие касания для просмотра с прокруткой, чтобы он мог прокручиваться,в противном случае (направление пальца не горизонтальное) позволяет пользователю перетаскивать изображение.

(у меня scrollView.directionalLockEnabled = YES) Интересно, как это можно сделать?

Второй вопрос:

Пользователь может отправить imageView обратно в uiScrollView, дважды нажавimageView.
Когда я это делаю, представление прокрутки не прокручивается до тех пор, пока я не перетаскиваю какие-либо imageViews в scrollView.
Не знаю, что является причиной этой проблемы ..

Ниже приведен мой код для отправкиimageView обратно в uiscrollview.

   aDragView.userInteractionEnabled = NO;
    CGPoint contentOffset = self.puzzlePieceScrollView.contentOffset;
    float x = contentOffset.x;

    int addIndex = x / widthWithPadding;
    aDragView.scrollContainerIndex = addIndex;

    CGRect newFrame;
    int puzzlePieceCount = 0;
    [UIView beginAnimations:@"addDragView" context: [aDragView retain]];

    for(UIView* subview in [self.puzzlePieceScrollView subviews])
    {
        if([subview isKindOfClass: [DragView class]])
        {
            DragView* dragView = (DragView*)subview;
            if(dragView.scrollContainerIndex >= addIndex)
            {
                dragView.scrollContainerIndex += 1;
                newFrame = dragView.frame;
                newFrame.origin.x += widthWithPadding;
                dragView.frame = newFrame;
            }
            ++puzzlePieceCount;
        }
    }

    newFrame = aDragView.frame;
    newFrame.origin.x = [self getOriginXForScrollIndex: addIndex];
    newFrame.origin.y = self.frame.origin.y + upperPadding;

    aDragView.frame = newFrame;

    [UIView setAnimationDuration:0.3];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationFinished:finished:context:)];
    [UIView commitAnimations];

    float newWidth = std::max((puzzlePieceCount+1) * widthWithPadding, [[UIScreen mainScreen] bounds].size.width );
    CGSize newContentSize = self.puzzlePieceScrollView.contentSize;
    newContentSize.width = newWidth;
    self.puzzlePieceScrollView.contentSize = newContentSize;


- (void) animationFinished:(NSString*)animationId finished:(BOOL)finished context:(void*)context
{   
    if ([animationId isEqualToString:@"addDragView"])
    {
        DragView* aDragView = (DragView*)context;
        // add to puzzlePieceScrollView                                                                                                                                                                                                                                       
        CGPoint p;
        p = CGPointMake(aDragView.bounds.size.width * 0.5, aDragView.bounds.size.height * 0.5);
        CGPoint newCenter = [aDragView convertPoint: p toView: self.puzzlePieceScrollView];
        aDragView.center = newCenter;

        [self.puzzlePieceScrollView addSubview: aDragView];
        aDragView.userInteractionEnabled = YES;
        [aDragView release];
    }

    self.puzzlePieceScrollView.userInteractionEnabled = YES;
}
...