Ну, это кажется легким, но я уже часами пытаюсь это сделать. Я пытаюсь разработать круговое управление с изображением и поворачивать управление, точно так же как управление громкостью большого звукового оборудования. Затем, чтобы повернуть изображение, я использую UIPanGestureRecognizer
и ATAN2
.Как повернуть изображение с помощью UIPanGestureRecognizer
Используя центр изображения, как координаты 0,0, а также источник и размер изображения для измерения области действия. После вычисления угла с X и Y из центра изображения (мой 0,0). Если Touch выходит за границы изображения, ничего не делайте, но если внутри изображения, я хочу повернуть его, но все равно не работаю. EDIT: Я не хочу использовать два пальца в этой процедуре, мне нужно использовать только один палец.
UIRotateGestureRecognizer использует два устройства и может принимать такой путь здесь.
Вот мой код:
@property (strong, nonatomic) IBOutlet UIImageView *myMainIndicatorRoulett;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanWithGestureRecognizer:)];
[self.myTestView addGestureRecognizer:panGestureRecognizer];
_myMainIndicatorRoulett.image = [TheColoristImages imageOfColorIndicatorWithIndicatorAngle:(CGFloat)90.0];
}
-(void)handlePanWithGestureRecognizer:(UIPanGestureRecognizer *)panGestureRecognizer
{
double a1;
double a2;
a1 = [panGestureRecognizer locationInView:self.view].x;
a2 = [panGestureRecognizer locationInView:self.view].y;
double b1;
double b2;
b1 = _myMainIndicatorRoulett.frame.origin.x;
b2 = _myMainIndicatorRoulett.frame.origin.y;
double c1;
double c2;
c1 = b1 + _myMainIndicatorRoulett.frame.size.width;
c2 = b2 + _myMainIndicatorRoulett.frame.size.height;
if ((a1 > b1) && (a1 < c1) && (a2 > b2) && (a2 < c2))
{
double Cx;
double Cy;
Cx = _myMainIndicatorRoulett.center.x;
Cy = _myMainIndicatorRoulett.center.y;
double Tx;
double Ty;
Tx = [panGestureRecognizer locationInView:self.view].x - Cx;
Ty = [panGestureRecognizer locationInView:self.view].y - Cy;
double myAngle = atan2(Ty, Tx);
_myMainIndicatorRoulett.transform = CGAffineTransformRotate(_myMainIndicatorRoulett.transform, myAngle * 3.14/180);
}
}
Почему вы не используете 'UIRotationGestureRecognizer'? Это сделает вещи очень простыми. – Desdenova
Что я хочу сделать, это процедура вращения одним пальцем, а не двумя, чтобы использовать iPhone одной рукой. Для других вещей использовать два пальца было бы легко, но здесь лучше всего один, и именно поэтому я так много борюсь. У тебя есть идея? –
Объясните, что делает ваш код неправильно. – Wain