2013-09-14 6 views
1

У меня есть следующая задача: на кнопку клика изображение должно вращаться до 90 градусов.Проблемы с просмотром изображения в iOS

Мой код:

#import <UIKit/UIKit.h> 
#import <QuartzCore/QuartzCore.h> 
@interface ViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIImageView *vector; 
@end 

=========

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize vector; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
} 
- (IBAction)rotateOn:(id)sender { 
    [self rotateImage:self.vector duration:2 
       curve:UIViewAnimationCurveEaseIn degrees:M_PI/2]; 
} 

- (void)rotateImage:(UIImageView *)image duration:(NSTimeInterval)duration 
       curve:(int)curve degrees:(CGFloat)degrees 
{ 
    // Setup the animation 
    [UIView beginAnimations:NULL context:NULL]; 
    [UIView setAnimationDuration:duration]; 
    [UIView setAnimationCurve:curve]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [image.layer setAnchorPoint:CGPointMake(0.5,0.5)]; 
    CGAffineTransform transform = 
    CGAffineTransformMakeRotation(degrees); 
    image.transform = transform; 
    [UIView commitAnimations]; 
} 




Перед нажатием на кнопку У меня есть эта

Before Click


После нажатия этой

After Click

Вы можете увидеть, что изображение вращается на 90 градусов. Но он сместился с начальной точки центра. Также, если я снова нажимаю кнопку, ничего не происходит.

ответ

1

Я предполагаю, что вы используете iOS6 и раскадровки, попробуйте отключите автомат в своем раскадровке и снова проверьте анимацию.
Если это работает, и вы хотите сохранить функцию автоматического макета, вам нужно будет отрегулируйте свои ограничения!

Кстати, по умолчанию anchorPoint уже (0.5, 0.5), линия не нужна (если вы не модифицировать anchorPoint в другом месте):

[image.layer setAnchorPoint:CGPointMake(0.5,0.5)]; 
+0

Я идиот :) Как я мог забыть о ограничениях!?! Отключить автомасштабирование - это решение проблемы с изменением стартовой позиции –

+0

Отключение автозапуска не является решением проблемы, это взломать. У меня такая же проблема, и я не могу понять, как «настроить мои ограничения». У меня есть изображение, ориентированное в супервизии, и оно прикреплено к нижней направляющей макета, и оно имеет фиксированную ширину и высоту. Какие ограничения приводят к смещению центра при повороте? Я взломал его, установив translatesAutoresizingMaskIntoConstraints в true на изображении. Это не решает реальной проблемы. – d370urn3ur

0

Удалить эту строку:

[image.layer setAnchorPoint:CGPointMake(0.5,0.5)]; 

Он не делает ничего, как {0.5,0.5} по умолчанию и Centrepoint. Вы, должно быть, использовали разные значения, такие как {0,0}, чтобы получить вращение в центре.

Чтобы увеличить ротацию при каждом нажатии кнопки, вам необходимо использовать кумулятивные преобразования. Преобразования «Сделать ...» не имеют контекста - они не учитывают предыдущие преобразования. Вместо этого попробуйте:

CGAffineTransform transform; 
transform = CGAffineTransformRotate(image.transform, degrees); 
image.transform = transform; 

Вы затем добавить degrees вращения текущего изображения преобразуют, а не сбросить преобразования к новому значению.

+0

спасибо. Ты прав! CGAffineTransformRotate (Transform, Degrees) действительно вращает изображение более одного раза. –

0

Использование:

imageView.transform = CGAffineTransformMakeRotation(0);//Upright 
imageView.transform = CGAffineTransformMakeRotation(M_PI/2);//90 degrees clockwise 
imageView.transform = CGAffineTransformMakeRotation(-M_PI/2);//90 degrees counter-clockwise 

также, проверка ваши рамы

  • , прежде чем нажать кнопку
  • после нажатия на кнопку до поворота
  • после поворота

Вы можете обнаружить аномалии там.

1

внутри ур метода кнопки вращения использовать этот код, чтобы повернуть изображение на 90

static int numRot = 0; 
myimage.transform = CGAffineTransformMakeRotation(M_PI_2 * numRot); 
++numRot; 
Смежные вопросы