2012-12-13 2 views
1

Я пытаюсь иметь UIImageView вращаться внутри UIScrollView, но когда я пытаюсь увеличить/Unzoom, моего вращения возвращается к 0.Увеличение с UIScrollView и вращаются с UIRotationGestureRecognizer

Вот код для моего вращения:

- (void)rotateImage:(UIRotationGestureRecognizer*)rotate 
    { 
    if ([rotate state] == UIGestureRecognizerStateEnded) 
    { 
    rotateAngle += [spin rotation]; 
    return; 
    } 

    myView.transform = CGAffineTransformMakerotation(rotateAngle + [rotate rotation]); 
} 

Относительно UIScrollView, я просто вернуться MyView в -(UIView*)viewForZoomingInScrollView:

И последнее информации, на мой интерфейс строитель, это мой вид стека:

UIImageView 
UIView (myView) 
UISCrollView 

Это означает, что у меня есть UIView между UIImageView и UIScrollView

+0

У вас есть решение для этого? В то же время я очень сильно зацикливаюсь. –

ответ

4

Я бы предпочел предложить вам использовать масштабирование с помощью жестящего жест. Он будет выглядеть более аккуратным и ровным. добавьте жест жестки к виду. для масштабирования добавить следующий код в методе селекторного

- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer 
{ 


    myView.transform = CGAffineTransformScale(recogniser.view.transform, recognizer.scale, recognizer.scale); 
recognizer.scale = 1; 

} 

для вращения,

-(void)handleRotate:(UIRotationGestureRecognizer *)rec 
{ 


    myView.transform = CGAffineTransformRotate(rec.view.transform, rec.rotation); 
    rec.rotation = 0; 
} 

убедитесь, что вы объявляете себя в качестве делегата как для жеста и реализовать следующий метод делегата

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    return YES; 
} 

удалить myView от

-(UIView*)viewForZoomingInScrollView: 

метод перед реализацией моего решения. не говоря уже просто жест обрабатывать масштабирование и не Scrollview. :) Удачи

+0

Ну, спасибо за ответ, вот что было отправлено на другую тему. Но у меня есть несколько вещей, связанных с этим ScrollView, поэтому мне было интересно, будет ли решение, сохраняя масштаб ScrollView. – Snaker

+0

хорошо использовать CGAffineTransformRotate вместо CGAffineTransformMakerotation –

+0

По-прежнему имеет ту же проблему с CGAffineTransformRotate – Snaker

3

для пинч Жест использовать код из библиотеки яблочного

Не забыл добавить UIGestureRecognizerDelegate,UIScrollViewDelegate

self.ScrollView= [[UIScrollView alloc]init]; 
self.ScrollView.frame = CGRectMake(0, 0, DEVICE_WIDTH, DEVICE_HEIGHT); 
[self.view addSubview:self.ScrollView]; 

// for pinch Gesture 
self.ScrollView.minimumZoomScale=0.5; 
self.ScrollView.maximumZoomScale=6.0; 
self.ScrollView.contentSize=CGSizeMake(imageView.frame.size.width, imageView.frame.size.height); 
self.ScrollView.delegate = self; 

[self.ScrollView addSubview:imageView]; 

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return imageView; 
} 

Для вращения,

UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(handleRotate:)]; 
    rotation.delegate =self; 
    [self.ScrollView addGestureRecognizer:rotation]; 

- (IBAction)handleRotate:(UIRotationGestureRecognizer *)recognizer { 

    recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, recognizer.rotation); 
    recognizer.rotation = 0; 

} 
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { 
    return YES; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^