#iphone #ipad #uiimageview #image-rotation
#iPhone #iPad #uiimageview #изображение-поворот
Вопрос:
В настоящее время я использую следующий код для поворота моего изображения
- (void)myImageRotate:(UIRotationGestureRecognizer *)gesture
{
if(arr==nil)
{
arr=[[NSMutableArray alloc] init ];
}
if ([gesture state] == UIGestureRecognizerStateBegan || [gesture state] == UIGestureRecognizerStateChanged)
{
currentRotation =(float) [gesture rotation];
self.transform=CGAffineTransformRotate(self.transform,currentRotation);
[gesture setRotation:0];
[arr addObject:[NSNumber numberWithFloat:currentRotation]];
}
NSLog(@"Rotation Value: %f", currentRotation);
// Теперь я сохраняю все значения поворота в массив и выполняю обратный массив и извлекаю // значение последнего поворота
NSArray *reversedArray = [[arr reverseObjectEnumerator] allObjects];
NSLog(@"Array: %@", arr);
NSLog(@"Reversed Array: %@", reversedArray);
// Теперь отображаемый перевернутый массив всегда начинается с 0.0 ….. значение like, каким бы ни был массив с обратным вращением: (
0,
0,
«0.001174212»,
«0.006030798»,
«0.01210225»,
«0.01215386»,
«0.01220191»,
«0.01224673»,
«0.006139159»,
«0.006149054»,
«0.01850212»,
«0.01237607»,
)
lastRotationValue = 0.0;
for (NSString* stringValue in [arr reverseObjectEnumerator]) {
double value = [stringValue doubleValue];
if (value != 0.0) {
//Note: 1 degree=0.0174532925 radian
lastRotationValue = value;
break;
}
}
if (lastRotationValue != 0.0) {
NSLog(@"My firstNonZeroValue of Rotation Degree:%f",lastRotationValue);
}
}
Теперь я записываю последнее значение поворота в XML-файл, закрываю и перезапускаю приложение, я могу прочитать последнее точное значение из XML-файла.
Но поскольку последнее значение поворота не является фактическим значением поворота, изображение не идеально поворачивается до последнего состояния.
Итак, я также попытался ввести жестко закодированное значение, и изображение будет вращаться идеально.
self.transform = CGAffineTransformMakeRotation(1.57);//By 90 Degree
Итак, каким должно быть решение для получения точного значения поворота изображения.
Ответ №1:
Попробуйте это
В .h поместите эту вещь с плавающим углом;
-(void)viewDidLoad
{
[super viewDidLoad];
UIRotationGestureRecognizer *recognizer = [[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(handleRotate:)] autorelease];
[self.rotatedView addGestureRecognizer:recognizer];
}
- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer {
// current value is past rotations current rotation
float rotation = angle -recognizer.rotation;
self.rotatedView.transform = CGAffineTransformMakeRotation(-rotation);
// once the user has finsihed the rotate, save the new angle
if (recognizer.state == UIGestureRecognizerStateEnded) {
angle = rotation;
NSLog(@"Last Rotation: %f",angle);
}
}
Комментарии:
1. Идеальный и короткий код, это именно то, что я искал.