5

画像をトリミングするためのサイズ変更可能な四角形を作成するのに問題があります。私はこの写真のようなものを達成しようとしています:

http://img192.imageshack.us/img192/8930/customcropbox.jpg

唯一の問題は、実際にどこから始めればよいか見当がつかないことです。トリミングのこの効果をどのように達成できるかについて、アドバイスが必要です。どのドキュメントを読む必要がありますか? Core Graphics または Quartz 2d? 両方?iPhone のリリース日からコーディングを行っていますが、コア グラフィックスなどを実際に使用したことはありません。助けやアドバイスをいただければ幸いです。達成したときにどのように行われるかを示すために、進行中にコードをここに投げます。:-) また、この長方形のボックスは UIImageView で画面上を移動できるため、より興味深いものになります。この目標を達成できることを楽しみにしています。

4

2 に答える 2

1

まったく同じ質問をブックマークしてください。

トリミング ビューを移動して画像の一部を正しく表示するところまでは行きましたが、スクロールビューのズームの処理は進行中の作業です。現在、UIScrollviewにレイヤー化されたイメージビューとプレーンUIViewがあり、スクロールビューの外側とより高いレベルには、カスタムトリミングUIViewがあります。touches メソッドを実装してドラッグを処理し、drawRect も実装します。

- (void)drawRect:(CGRect)rect {
    // Drawing code
    if( self.image == nil )
        return;

    CGPoint offset = scrollView.contentOffset;
    clipRect = CGRectOffset(self.frame, offset.x, offset.y);

    UIImage *croppedImage = [image croppedImage:clipRect];
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [croppedImage drawAtPoint:CGPointMake(0, 0)];
}

注: 私のトリミング ビューは UIImageView の子孫ではなく、他のビューからの基になる画像への参照を持つ単なる UIView です。

「croppedImage」は UIImage のカテゴリであり、非常に単純です。

@implementation UIImage (Resize)
- (UIImage *)croppedImage:(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return croppedImage;
}
...
@end

いくつかの UIScrollViewDelegate メソッドを実装し、スクロール アクティビティを通過させて、クロッピング ビューの同期を維持できるようにしました。ズームも引き継がれますが、前述のように、まだ期待どおりに機能していません。

別の注意: トリミングされた領域で毎回新しい UIImage を生成する時間を無駄にする必要はないと思います。

CGImageRef imageRef = CGImageCreateWithImageInRect([yourImage CGImage], bounds);
and 
CGContextDrawImage(ctx, clipRect, imageRef);
于 2010-04-21T13:08:51.440 に答える
1

Quartz は Core Graphics の「マーケティング用語」であり、そこから始めるべきです。UIView (-drawRect: での完全なカスタム描画) を使用し、そのタッチをトラップして追跡し、結果を描画します。UIGraphicsGetCurrentContext() を使用して、現在のグラフィックス コンテキストを取得できます。それはあなたが始めるのに十分なはずです!

于 2009-12-28T21:30:19.307 に答える