-2

RotatedViewのサブクラスを作成し、のサブビューとしてUIView追加し、imageView の画像と同じメソッドを使用して画像を描画します。imageView にピンチ ジェスチャと回転ジェスチャを適用しました。imageView をつまむと描画イメージも変更されます。しかし、imageView を回転させても、描画イメージは変更されません。次のコードを使用しました::UIImageViewRotatedViewRotatedViewdrawRect:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor = [UIColor redColor];
        imageView = [[UIImageView alloc] initWithFrame:CGRectMake(80, 150, 100, 150)];
        imageView.image = [UIImage imageNamed:@"Images_6.jpg"];
        imageView.userInteractionEnabled = YES;
        [self addSubview:imageView];

        UIRotationGestureRecognizer *rotationGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationMethod:)];
        rotationGesture.delegate = self;
        [imageView addGestureRecognizer:rotationGesture];



    }
    return self;
}



- (void)drawRect:(CGRect)rect
{
    // Drawing code
    CGContextRef context =UIGraphicsGetCurrentContext();
    CGRect rectFrame = CGRectMake(0, 0, imageView.frame.size.width, imageView.frame.size.height);
    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
     CGContextSetLineWidth(context, 10.0);
    CGContextBeginPath(context);

    CGContextMoveToPoint(context, 0, 0);
    CGContextAddLineToPoint(context, 90, 0);
    CGContextAddLineToPoint(context, 90, 90);

    CGContextAddLineToPoint(context, 0, 90);

    CGContextAddLineToPoint(context, 0, 0);



    CGContextClip(context);


    CGContextStrokePath(context);
    CGContextDrawImage(context,rectFrame, imageView.image.CGImage);
}

-(void)rotationMethod:(UIRotationGestureRecognizer *)gestureRecognizer{
    NSLog(@"rotationMethod");
    if ([gestureRecognizer state]==UIGestureRecognizerStateBegan || [gestureRecognizer state]==UIGestureRecognizerStateChanged) {
        CGAffineTransform transform = CGAffineTransformRotate(gestureRecognizer.view.transform, gestureRecognizer.rotation);
        gestureRecognizer.view.transform = transform;
         [gestureRecognizer setRotation:0];

    }
    [self setNeedsDisplay];
}

imageViewが回転しているときにUIViewで画像を回転させるにはどうすればよいですか?

**

編集:

**

最初の方法を使用して解決策を得ました。今、私は2番目の方法を使用しています。これがシンプルでベストだと思いますが、どれがベストかはわかりません。2番目の方法では、画像は回転しますが、中心点ではありません。私はこの問題を解決するのに苦労しています。私を助けてください。

変更方法は次のとおりです。

- (void)drawRect:(CGRect)rect
{
    NSLog(@"drawRect");
    // Drawing code
    CGContextRef context =UIGraphicsGetCurrentContext();

    CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
     CGContextSetLineWidth(context, 10.0);
    CGContextBeginPath(context);

    CGContextMoveToPoint(context, imageRect.origin.x, imageRect.origin.y);
    CGContextAddLineToPoint(context, imageRect.size.width, imageRect.origin.y);
    CGContextAddLineToPoint(context, imageRect.size.width, imageRect.size.height);

    CGContextAddLineToPoint(context, imageRect.origin.x, imageRect.size.height);

    CGContextAddLineToPoint(context, imageRect.origin.x, imageRect.origin.y);

    CGContextClip(context);


    CGContextStrokePath(context);
    CGContextDrawImage(context, imageRect, [self rotateImage:imageView.image].CGImage);


}
-(void)rotationMethod:(UIRotationGestureRecognizer *)gestureRecognizer{
    NSLog(@"rotationMethod");
    if ([gestureRecognizer state]==UIGestureRecognizerStateBegan || [gestureRecognizer state]==UIGestureRecognizerStateChanged) {
        CGAffineTransform transform = CGAffineTransformRotate(gestureRecognizer.view.transform, gestureRecognizer.rotation);

        gestureRecognizer.view.transform = transform;
        lastRotation = gestureRecognizer.rotation;       
         [gestureRecognizer setRotation:0];

    }
    [self setNeedsDisplay];
}
- (UIImage *)rotateImage:(UIImage *) img
{
    NSLog(@"rotateImage");

    CGAffineTransform transform = imageView.transform;
    transform = CGAffineTransformTranslate(transform, img.size.width, img.size.height);
    transform = CGAffineTransformRotate(transform, lastRotation);
    transform = CGAffineTransformScale(transform, -1, -1);

    CGContextRef ctx = CGBitmapContextCreate(NULL, img.size.width, img.size.height,
                                             CGImageGetBitsPerComponent(img.CGImage), 0,
                                             CGImageGetColorSpace(img.CGImage),
                                             CGImageGetBitmapInfo(img.CGImage));
    CGContextConcatCTM(ctx, transform);
    CGContextDrawImage(ctx, CGRectMake(20,20,img.size.width,img.size.height), img.CGImage);

    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
    UIImage *newImg = [UIImage imageWithCGImage:cgimg];
    CGContextRelease(ctx);
    CGImageRelease(cgimg);
    return newImg;


}
4

2 に答える 2

1

CGContextScaleCTMandを使用する必要がありますCGContextRotateCTM(そして、おそらく を適切に変換して、の変換CGContextRefに一致させる必要がありますUIImageView

Quartz 2D プログラミング ガイドをご覧ください。

于 2013-05-02T09:36:09.507 に答える