2016-04-21 1 views
0

Есть несколько сообщений, которые я нашел, но ни один из них не полезен для меня.Поворот изображения (не UIImageView) на один градус каждый раз при нажатии кнопки

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

Я отлаживал и обнаружил, что при каждом повороте (по часовой стрелке/против часовой стрелки) размер изображения увеличивается. Я знаю, когда изображение поворачивается, а размер изображения немного увеличивается, но здесь размер изображения увеличивается намного сильнее, чем ожидание.

//code for image rotation 
- (UIImage *)imageRotatedByDegrees:(UIImage*)oldImage deg:(CGFloat)degrees{ 

// calculate the size of the rotated view's containing box for our drawing space 
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,oldImage.size.width, oldImage.size.height)]; 
CGAffineTransform t = CGAffineTransformMakeRotation(degrees * M_PI/180); 
rotatedViewBox.transform = t; 
CGSize rotatedSize = rotatedViewBox.frame.size; 
// Create the bitmap context 
UIGraphicsBeginImageContext(rotatedSize); 
CGContextRef bitmap = UIGraphicsGetCurrentContext(); 

// Move the origin to the middle of the image so we will rotate and scale around the center. 
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); 

// // Rotate the image context 
CGContextRotateCTM(bitmap, (degrees * M_PI/180)); 

// Now, draw the rotated/scaled image into the context 
CGContextScaleCTM(bitmap, 1.0, -1.0); 
CGContextDrawImage(bitmap, CGRectMake(-oldImage.size.width/2, -oldImage.size.height/2, oldImage.size.width, oldImage.size.height), [oldImage CGImage]); 

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 


- (IBAction)btnRotateImageTapped:(UIButton *)sender { 

static NSInteger degree = 0; 

if (sender.tag == 471) { //rotate left btn tag 
    degree += 1; 
} else if (sender.tag == 472) { //rotate right btn tag 
    degree += -1; 
} 

UIImage *img = [self imageRotatedByDegrees:self.imgViewTeethTemplate.image deg:degree]; 
self.imgViewTeethTemplate.image = img; 

} 

Я не знаю, правильно это или нет. Если нет, кто-нибудь может мне помочь. Любая помощь должна быть оценена.

+0

может быть [этот вопрос SO] (http://stackoverflow.com/questions/19219855/uiimageview-get-transformed-uiimage) был бы полезен для вас – heximal

+0

Я не то изображение, которое стало меньше. Когда вы поворачиваете изображение, холст изображения изменяется, чтобы сохранить размер изображения. Изображение, вращающееся до 45 °, не может помещаться в холст изображения без вращения. Поэтому вам нужно обновить фрейм UIImageView. – ejanowski

+0

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

ответ

0

Я думаю, что это потому, что вы рассчитываете новый размер при каждом повороте. Вы должны скопировать свое изображение в новое, которое больше 1/cos (45deg), (2/sqrt (2)), а затем сделайте поворот этого нового изображения по мере необходимости. Вам не нужно беспокоиться о том, чтобы потерять часть исходного изображения, поскольку оно будет содержаться в большем, чем бы ни было поворот.

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