#iphone #objective-c #ipad
#iPhone #objective-c #iPad
Вопрос:
Уважаемые все,
Я хочу повернуть UIImageView относительно точки в методе touchesMoved.
Я пробовал 2-3 метода, но я не получаю точного результата, какого я ожидал.
Первый метод, который я использовал
CGAffineTransform transforms = CGAffineTransformMakeRotation(M_PI/2);
imgView.transform = transforms;
Это написано в touchesMoved. Итак, я ожидаю поворота для просмотра изображения в каждом touchesMoved.
Но поворот происходит только один раз.
Второй метод, который я использовал, был
CGAffineTransform transforms = CGAffineTransformRotate(imgView.transform, M_PI/2);
imgView.transform = transforms;
Теперь результат, который я получаю, заключается в том, что изображение в режиме просмотра изображений непрерывно вращается при каждом перемещении. Но imageview не вращается. Что мне нужно, так это повернуть imageview, а не изображение.
Любая помощь будет высоко оценена.
Спасибо и с наилучшими пожеланиями, Рупеш Р. Менон
Комментарии:
1. ДА. Это также не дает желаемого результата.
Ответ №1:
Если я правильно понял, вы хотите добиться поворота изображения одним пальцем. Если это так, вы можете использовать следующие функции из одного из моих текущих рабочих проектов. Вы можете использовать это как для одного изображения, так и для нескольких изображений. Вам необходимо внести некоторые изменения для нескольких изображений. Лучший способ — расширить класс UIImageView и создать свой собственный класс.
Из touches moved вызвать эту функцию
- [самотрансформирующееся изображение с касаниями: прикосновение];
Объявите 1 свойство и синтезируйте следующим образом. (Также, пожалуйста, объявите другие переменные, если требуется, в приведенном ниже коде.
- @property (неатомный) CGFloat fltRotatedAngle;
-(void)transformImagewithTouches:(UITouch *)touchLocation
{
//NSLog(@"Before %f",self.fltRotatedAngle);
CGPoint touchLocationpoint = [touchLocation locationInView:[self superview]];
CGPoint PrevioustouchLocationpoint = [touchLocation previousLocationInView:[self superview]];
CGPoint origin;
origin.x=self.center.x;
origin.y=self.center.y;
CGPoint previousDifference = [self vectorFromPoint:origin toPoint:PrevioustouchLocationpoint];
CGAffineTransform newTransform =CGAffineTransformScale(self.transform, 1, 1);
CGFloat previousRotation = atan2(previousDifference.y, previousDifference.x);
CGPoint currentDifference = [self vectorFromPoint:origin toPoint:touchLocationpoint];
CGFloat currentRotation = atan2(currentDifference.y, currentDifference.x);
CGFloat newAngle = currentRotation- previousRotation;
//Calculate Angle to Store
fltTmpAngle = fltTmpAngle newAngle;
self.fltRotatedAngle = (fltTmpAngle*180)/M_PI;
newTransform = CGAffineTransformRotate(newTransform, newAngle);
[self animateImageView:self toPosition:newTransform];
}
-(void)animateImageView:(UIImageView *)theView toPosition:(CGAffineTransform) newTransform
{
[UIView setAnimationsEnabled:YES];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.0750];
self.transform = newTransform;
[UIView commitAnimations];
}
-(CGPoint)vectorFromPoint:(CGPoint)firstPoint toPoint:(CGPoint)secondPoint
{
CGFloat x = secondPoint.x - firstPoint.x;
CGFloat y = secondPoint.y - firstPoint.y;
CGPoint result = CGPointMake(x, y);
return resu<
}
Надеюсь, это поможет. Если вы зациклились, пожалуйста, дайте мне знать, я обязательно вам помогу.
Комментарии:
1. Спасибо, Дженнис, это было действительно полезно. Я смог использовать некоторую часть вашего кода.
2. @Jennis, я хочу как поворот, так и перевод, если я хочу повернуть, а затем перетащить свое изображение в какую-либо другую часть экрана, как я могу это сделать?
3. Сначала вам нужно будет определить действие, то есть что делать поворот или перевод. и на основе выбранного действия действуйте соответствующим образом. вы можете легко получить код перевода из руководств. и поворот, как я указал.
Ответ №2:
Спасибо за проявленный вами интерес к помощи мне.
Когда я использовал следующий код, я смог повернуть изображение под нужным углом.
imgView.layer.transform = CATransform3DMakeRotation(pCalculator.tangentToCornerAngle, 0, 0, 1);
где imgView — это UIImageView.
pCalculator.tangentToCornerAngle is the desired angle in which rotation has to be made.
Function is CATransform3DMakeRotation(CGFloat angle, CGFloat x, <CGFloat y, CGFloat z);
Спасибо всем,
Рупеш Р. Менон
Ответ №3:
Это потому, что вы повернули его на M_PI / 2, и когда вы поворачиваете его снова, он поворачивает его из исходного положения. Используйте этот
CGAffineTransform transforms = CGAffineTransformConcat(imgView.transform,CGAffineTransformMakeRotation(M_PI/2));
imgView.transform = transforms;
Комментарии:
1. Дорогой Индер, я попробовал то, что вы предложили. Но это дает мне тот же результат, что и при использовании второго метода. ie; изображение вращается, а не вид изображения. Мне нужно, чтобы вид изображения вращался. Есть какие-либо способы, спасибо за проявленный интерес.
2. Как бы вы сказали, что ImageView не поворачивается, вы поворачиваете ImageView без изображения, поэтому содержимое поворачивается…
3. Мой дорогой друг, у вас должно быть квадратное изображение, поэтому, повернув его на 90 градусов, вы почувствуете то же самое. либо измените его высоту или ширину (прямоугольник, а не квадрат), тогда вы сможете увидеть разницу, либо вы можете повернуть его на 45 градусов только для целей тестирования.
M_PI/4
4. Нет, дорогой. Мое изображение не имеет квадратного размера. Это чисто прямоугольник.
5. но я протестировал его в тестовом проекте, и он работает нормально… просто измените цвет фона на красный и поместите в него изображение меньшего размера, а contentMode установите в центр