2011-06-07 70 views
2

有谁知道为什么它不会旋转雪碧?UIGestureRecognizer不会旋转雪碧 - Cocos2d

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 

     CGPoint center = CGPointMake(CGRectGetMidX([[touch view] bounds]), CGRectGetMidY([[touch view] bounds])); 

     CGPoint firstLocation = [touch previousLocationInView:[touch view]]; 
     CGPoint location = [touch locationInView:[touch view]]; 

     CGPoint currentTouchPoint = [[CCDirector sharedDirector] convertToGL:location]; 
     CGPoint previousTouchPoint = [[CCDirector sharedDirector] convertToGL:firstLocation]; 

     CGPoint line2Start = currentTouchPoint; 
     CGPoint line1Start = previousTouchPoint; 
     CGPoint line2End = CGPointMake(center.x + (center.x - line2Start.x), center.y + (center.y - line2Start.y)); 
     CGPoint line1End = CGPointMake(center.x + (center.x - line1Start.x), center.y + (center.y - line1Start.y)); 

     CGFloat a = line1End.x - line1Start.x; 
     CGFloat b = line1End.y - line1Start.y; 
     CGFloat c = line2End.x - line2Start.x; 
     CGFloat d = line2End.y - line2Start.y; 

     CGFloat line1Slope = (line1End.y - line1Start.y)/(line1End.x - line1Start.x); 
     CGFloat line2Slope = (line2End.y - line2Start.y)/(line2End.x - line2Start.x); 

     CGFloat degs = acosf(((a*c) + (b*d))/((sqrt(a*a + b*b)) * (sqrt(c*c + d*d)))); 

     CGFloat angleInRadians = (line2Slope > line1Slope) ? degs : -degs; 

     [g setRotation:angleInRadians]; 
} 

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    UIGestureRecognizer *recognizer; 
    [recognizer setState:UIGestureRecognizerStateEnded]; 
} 

G是[g setRotation:angleInRadians]中的精灵;

然后,当我在这个

[[touch view] setTransform:CGAffineTransformRotate([[touch view] transform], [grinder rotation])]; 

添加它转动整个场景!请帮忙吗?

谢谢!

回答

5

哥们

下面

是链接的用户界面,工具包,但它会工作的优良的cocos2d以及 你需要采取协调系统

1)cocos2d的起源护理左下角

2)对于UIKit的原点是左上角

"Rotate image by Dragging"

何pe这个帮助你 好运

1

在init方法中传递下面的代码。这将创建一个手势识别

UIRotationGestureRecognizer *rotationGesture = 
[[UIRotationGestureRecognizer alloc] initWithTarget:self 
              action:@selector(handleRotate:)]; 
rotationGesture.delegate = self; 
    [myImageView addGestureRecognizer:rotationGesture]; 
    [rotationGesture release]; 

这将触发排气

- (void)handleRotate:(UIRotationGestureRecognizer *)recognizer { 
if(recognizer.state == UIGestureRecognizerStateBegan || 
recognizer.state == UIGestureRecognizerStateChanged) 
{ 
recognizer.view.transform = CGAffineTransformRotate(recognizer.view.transform, 
                recognizer.rotation); 
[recognizer setRotation:0]; 
} 
}