Передача штрихов в копию UIImageView - PullRequest
0 голосов
/ 30 июня 2011

Я прошел долгий путь, пытаясь перетащить UIImageViews из UITableView в другое представление.

У меня все работает до определенной точки.Я создаю подкласс UIPanGestureRecognizer и присоединяю этот пользовательский распознаватель ко всем UIImageViews, которые я загружаю в табличное представление.

Затем я переопределяю метод touchesMoved распознавателя, чтобы, среди прочего, добавить временное представление в окно ключа приложений, а затем добавитькопия выбранного UIImageView на этот временный вид, как показано ниже:

UIView *dragAndDropView = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
        dragAndDropView.backgroundColor = [UIColor whiteColor];

        [[UIApplication sharedApplication].keyWindow addSubview: dragAndDropView]; 

        ElementImageView * sourceImageView = (ElementImageView*)self.view;

        ElementImageView *newImageView =  [[ElementImageView alloc] initWithImage:sourceImageView.image];
        newImageView.userInteractionEnabled = YES;
        newImageView.frame = [self.view convertRect:sourceImageView.frame toView:dragAndDropView];

        [dragAndDropView addSubview:newImageView];

В результате этого кода я действительно получаю копию исходного изображения поверх моего dragAndDropView (я могу сказать,потому что я установил цвет фона dragAndDropView на белый).И если я поднимаю палец и снова касаюсь скопированного изображения, я, конечно, могу перетаскивать его по экрану по своему желанию.Но я не могу найти способ плавно перенести существующее прикосновение к новому объекту.

Есть идеи?

1 Ответ

0 голосов
/ 30 июня 2011

Я думаю, вы могли бы сделать следующее на вашем обработчике UIPanGestureRecognizer:

-(void) handlePan:(UIPanGestureRecognizer *)recognizer  {

if (recognizer.state == UIGestureRecognizerStateBegan) {

    // the initial position
    initialPanPositionX = self.transform.tx;
    initialPanPositionY = self.transform.ty;

    // create a copy of the imageview
    panImage = [[UIImageView alloc] initWithImage:imageView.image];
    panImage.frame = imageView.frame;

    [self.view addSubview:panImage];

}
else if (recognizer.state == UIGestureRecognizerStateChanged) {

    if (!startedMoving) {
        startedMoving = YES;

        [UIView beginAnimations:nil context:NULL]; {
            [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
            [UIView setAnimationDuration:0.2f];

            // an effect to increase a copy a little bit when start dragging
            CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, 1.2, 1.2);

            panImage.bounds = CGRectApplyAffineTransform(panImage.bounds, zt);

        }
        [UIView commitAnimations];

    }

    // translation
    CGPoint point = [recognizer translationInView:self];
    panImage.transform = CGAffineTransformMakeTranslation(initialPanPositionX + point.x, initialPanPositionY + point.y);


}
else if (recognizer.state == UIGestureRecognizerStateEnded ) {

    startedMoving = NO;

    // drop the imageView if it's inside the droppable view


    [panImage release], panImage = nil;

}

}

Надеюсь, это поможет.

...