2

私はUIScrollViewzooming を持ってUIImageViewいます。つまり、実装しています:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return self.imageView;
}

UIRotationGestureRecognizerこれに a を追加しようとしimageViewていますが、次のようにします。

_rotationGestureRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];
[self.imageView addGestureRecognizer:_rotationGestureRecognizer];

-(void)rotate:(id)sender
{
    UIRotationGestureRecognizer *rotationGestureRecognizer = [(UIRotationGestureRecognizer*)sender retain];

    if(rotationGestureRecognizer.state == UIGestureRecognizerStateEnded)
    {
        self.lastRotation = 0.0;
        return;
    }

    CGFloat rotation = 0.0 - (self.lastRotation - rotationGestureRecognizer.rotation);
    rotationGestureRecognizer.view.transform = CGAffineTransformRotate(rotationGestureRecognizer.view.transform, rotation);
    self.lastRotation = rotationGestureRecognizer.rotation;

    [rotationGestureRecognizer release];
}

私はただ疑問に思っています、これを行うことさえ可能ですか?何も起こっていないのでUIScrollView、私へのタッチをブロックしているようです。UIImageViewApple は、ズーム ビューでこれを行わないことを推奨していますUIScrollViewか?

4

2 に答える 2

2
-(void)rotate:(UIRotationGestureRecognizer *)sender
{   
    [self bringSubviewToFront:[(UIRotationGestureRecognizer*)sender view]]; 
    if([(UIRotationGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) 
    {       
        lastRotation = 0.0;
        return;
    }
    CGFloat rotation = 0.0 - (lastRotation - [(UIRotationGestureRecognizer*)sender rotation]);  
    CGAffineTransform currentTransform = [(UIPinchGestureRecognizer*)sender view].transform;
    CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform, rotation);   
    [[(UIRotationGestureRecognizer*)sender view] setTransform:newTransform];    
    lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
    lastRotation = [(UIRotationGestureRecognizer*)sender rotation];
}
于 2013-01-05T05:01:49.960 に答える