обнаружить жест поворота и масштабировать жест iphone SDK - PullRequest
0 голосов
/ 12 июля 2010

Я хочу повернуть представление uiimage, а также масштабировать представление изображения, так как я могу определить жест касания, который пользователь масштабирует или пользователь поворачивает?

Ответы [ 2 ]

1 голос
/ 12 июля 2010

Начиная с iOS 3.2, Apple представила использование UIGestureRecognizer. Два, которые вас заинтересуют: UIPinchGestureRecognizer и UIRotationGestureRecognizer. Чтобы использовать жест щипка, вы можете сделать следующее:

- (void)viewDidLoad {
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchGesture:)];
    [imageView addGestureRecognizer:pinch];
    [pinch release];
}

- (void)handlePinchGesture:(UIGestureRecognizer *)sender {
    NSLog(@"New Scale: %f", sender.scale);
}

Тогда вы могли бы сделать нечто подобное для UIRotationGestureRecognizer.

0 голосов
/ 31 августа 2013

в вашем файле viewcontroller.h запишите эти свойства

IBOutlet UIImageView *imgRotate;
CGFloat lastScale;
CGFloat lastRotation;

теперь в вашем файле viewcontroller.m напишите следующий код,

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

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

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

-(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];

[imgRotate setTransform:newTransform];
lastScale = [(UIPinchGestureRecognizer*)sender scale];
}

-(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];

[imgRotate setTransform:newTransform];
lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];

if ([touch view] == imgRotate) {
    CGPoint location = [touch locationInView:self.view];
    imgRotate.center = location;
}
}
...