我正在使用平移手势,在它移动后,我试图让它以触摸发生的角度移动。我想在平移发生时以及当用户抬起手指时得到触摸点。之后计算点的角度并使用它来移动。我不确定我在这里做错了什么。
-(void) dragging:(UIPanGestureRecognizer *)p{
UIView *v = p.view;
CGPoint velocity;
if(p.state == UIGestureRecognizerStateBegan){
self.origC = v.center;
self.pointIn = [p locationInView:[UIApplication sharedApplication].keyWindow];
//NSLog(@"%f",self.pointIn.x);
//pointInWindow = CGPointMake(pointIn.x, pointIn.y);
}
//NSLog(@"%f,%f orig %f, %f",pointInWindow.x, pointInWindow.y,self.origC.x,self.origC.y);
//velocity = [p velocityInView:v.superview];
//NSLog(@"x=%f",velocity.x);
//NSLog(@"y=%f",velocity.y);
[UIView animateWithDuration:1 delay:0 options:UIViewAnimationCurveEaseInOut animations:^{
CGPoint delta = [p translationInView:v.superview];
CGPoint c = self.origC;
c.x += delta.x;
c.y += delta.y;
v.center = c;
}completion:nil];
if(p.state == UIGestureRecognizerStateEnded){
CGPoint lastPoint = [p locationInView:[UIApplication sharedApplication].keyWindow];
NSLog(@"orig %f , last %f",self.pointIn.x,lastPoint.x);
self.lateC = v.center;
CGFloat deltaX = self.pointIn.x - lastPoint.x;
CGFloat deltaY = self.pointIn.y - lastPoint.y;
double angle = atan(deltaX/deltaY) * 180/M_PI;
if(angle < 0)
angle += 360;
//NSLog(@"%f",angle);
self.addy = angle;
self.addx = angle;
}
}
这是在我的 ViewController 中:
-(void) animateBalls:(NSTimer*) time{
for(Ball *balls in self.view.subviews){
[UIView beginAnimations:nil context:nil];
//[UIView setAnimationRepeatAutoreverses:NO];
CGFloat x;
CGFloat y;
for(Ball *subBalls in self.view.subviews){
if(balls != subBalls)
if((CGRectIntersectsRect([balls frame], [subBalls frame]))){
[subBalls changeDirectionX];
[subBalls changeDirectionY];
}
}
CGPoint point = balls.center;
if(point.x + 25 > self.view.bounds.size.width)
[balls changeDirectionX];
if(point.x - 25 < 0)
[balls changeDirectionX];
if(point.y + 25 > self.view.bounds.size.height)
[balls changeDirectionY];
if(point.y - 25 < 0)
[balls changeDirectionY];
if(balls.directionX == 1){
x = point.x + (2 * cos(balls.addx));
}
else{
x = point.x - (2 * cos(balls.addx));
//balls.addx;
}
if(balls.directionY == 1){
y = point.y + (2 * sin(balls.addx));
}
else
y = point.y - (2 * sin(balls.addx));
//balls.addy;
//CGFloat x = (CGFloat) random()/(CGFloat) RAND_MAX * self.view.bounds.size.width;
//CGFloat y = (CGFloat) random()/(CGFloat) RAND_MAX * self.view.bounds.size.height;
CGPoint squarePostion = CGPointMake(x, y);
balls.center = squarePostion;
[UIView commitAnimations];
//[self.view setNeedsDisplay];
}
}