Перемещение изображения после поворота ведет себя неправильно - PullRequest
1 голос
/ 06 июня 2011

У меня проблема при попытке переместить после поворота того же изображения. Мой код работает нормально, когда я пытался переместить изображение перед его поворотом. После поворота изображения, когда я попытался переместить повернутое изображение, изображение не перемещается в направлении, которое я перетащил. Может кто-нибудь мне помочь. Заранее спасибо. Я использую код

#import "myDraggableImage.h"
#import <CoreGraphics/CoreGraphics.h>
#import <QuartzCore/CoreAnimation.h>



@implementation myDraggableImage



- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{




    [[self superview] bringSubviewToFront:self];
    CGPoint pt = [[touches anyObject] locationInView:self]; 
    startLocation = pt; 

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

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

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];
    [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:1];
    [panRecognizer setDelegate:self];
    [self addGestureRecognizer:panRecognizer];
    [panRecognizer release];

    CGRect frame = [self frame];
    printf("\n the x co ordinte of the frame is :%f",frame.origin.x);
    printf("\n the y co ordinte of the frame is :%f",frame.origin.y);
    printf("\n the widht co ordinte of the frame is :%f",frame.size.width);
    printf("\n the height co ordinte of the frame is :%f",frame.size.height);


}


-(void)rotate:(id)sender 
{

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

        lastRotation = 0.0;
        return;
    }

    CGFloat rotation = 0.0 - (lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);

    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);

    [[(UIRotationGestureRecognizer*)sender view] setTransform:newTransform];

    lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
    CGRect frame = [self frame];



}


-(void)scale:(id)sender 
{
    if([(UIPinchGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
    {

        lastScale = 1.0;
        return;
    }

    CGFloat scale = 1.0 - (lastScale - [(UIPinchGestureRecognizer*)sender scale]);

    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGAffineTransform newTransform = CGAffineTransformScale(currentTransform, scale, scale);

    [[(UIPinchGestureRecognizer*)sender view] setTransform:newTransform];

    lastScale = [(UIPinchGestureRecognizer*)sender scale];
}

-(void)move:(id)sender 

{

    [[[(UITapGestureRecognizer*)sender view] layer] removeAllAnimations];   

    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self];
    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) 

{
        firstX = [[sender view] center].x;
        firstY = [[sender view] center].y;
    }

    translatedPoint = CGPointMake(firstX+translatedPoint.x, firstY+translatedPoint.y);

    [[sender view] setCenter:translatedPoint];

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

        CGFloat finalX = translatedPoint.x ;//+ (.15*[(UIPanGestureRecognizer*)sender velocityInView:self].x);
        CGFloat finalY = translatedPoint.y ;//+ (.15*[(UIPanGestureRecognizer*)sender velocityInView:self].y);


        if(finalX < 0) 
        {

            finalX = 0;
        }

        else if(finalX > 460) 
        {

            finalX = 440;
        }

        if(finalY < 40)
        {

            finalY = 40;

        }

        else if(finalY > 300)
        {
            finalY = 300;
        }


        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:.35];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
        [[sender view] setCenter:CGPointMake(finalX, finalY)];
        [UIView commitAnimations];
    }
}




- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{

    return ![gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]];
}


-(void)dealloc
{

    [super dealloc];
}

@end

1 Ответ

1 голос
/ 06 июня 2011

touchesBegan:withEvent: - это неправильное место для настройки ваших жестов, так как оно будет добавлять новые жесты каждый раз, когда пользователь.Что касается функции перевода, трудно понять, что не так.Некоторые процессы здесь кажутся чрезмерными.Хотя я не реализовал анимационную часть (чтобы ее ввести, верно?), Взгляните на this sample project.Это может помочь вам начать работу в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...