Я попытаюсь поместить свои два цента в это, поскольку я просто должен был решить подобный сценарий.
необходимо осуществить методы прикосновений в представлении, что вы хотите обращаться со всем движением
- (пустота) touchesBegan: (NSSet *), касается withEvent: (UIEvent *) событие
- (пустота) touchesMoved: (NSSet *), касается withEvent: (UIEvent *) событие
- (пустота) touchesEnded: (NSSet *), касается withEvent: (UIEvent *) событие
Альберт прав в письменной форме, что необходимо обнаружить изменение x и y местоположения. Можно получить местоположение от прикосновений NSSet, которое посылают в метод на спусковом механизме метода.
В методах необходимо будет осуществить некоторое изменение этого кода, чтобы работать с данными о прикосновениях:
for(UITouch *t in touches){
if([t tapCount] > 1){
return;
}
CGPoint loc = [t locationInView:self.view];
Once you have the x and y of where a user touched, in this case the CGPoint loc, you can run the atan2 method from the math.h library and get back the radian of the circle. You will need to #include < math.h > in order to use atan2()
atan2() нужны два аргумента, чтобы работать, различие между двумя пунктами y и двумя пунктами x. В моем случае я использовал ток (коснитесь пункта y, - центр круга y), и ток (касаются пункта x, - центр круга x).
double rads = atan2((loc.y - (self.frame.size.height/2)), (loc.x - (self.frame.size.width/2)));
оттуда можно сделать любое количество вещей с той информацией. Чтобы вычислить новый x и y положение вокруг круга, необходимо использовать косинусные и синусоидальные функции, чтобы вычислить надлежащие координаты.
newXposition = CenterX + cos(rads) * radiusOfCircle
newYposition = CenterY + sin(rads) * radiusOfCircle
Можно получить новый xPosition, добавив центр X положений круга к результату because(, вводящего радианы, которые мы просто получили до), умноженный на радиус круга, И новый yposition получен, делая то же самое только с грехом() вместо этого.
Таким образом, мой код выглядел примерно так....
float radius = 61;
float newXPos = 140 + (cos(rads) * radius);
float newYPos = 165 + (sin(rads) * radius);
Удача, надейтесь, что это помогает вам начать. Этот материал может быть хитрым