2

これは説明するのが難しい問題です...しかし、私は最善を尽くします。最初に問題の背景、基本的に私はios用のアプリのようなペイントを作成していて、ユーザーが画像の一部を選択して(マルチタッチは不透明な長方形を示します)、削除/コピー-貼り付け/回転できる機能を追加したいと考えていましたその部分。削除とコピー&ペーストは完全に機能していますが、ローテーションは別の話です。画像の一部を回転させるには、まず画像の一部をコピーして、選択した長方形のレイヤーの背景に設定します。次に、ユーザーはスライダーを使用して任意の角度で回転します。問題は、画像が長方形の別の場所から表示されることがあることです(つまり、コピーされた画像が長方形の間違った角にぶら下がっています)。これは私のrectangle.frameの問題かもしれないと思いました。起源ですが、その値はさまざまなテストを通じて正しいようです。ドラッグの進む方向によっても変わるようです...

これらは問題の画面です

1

2

3

上記の各ケースで、画像の不一致部分は灰色の長方形の内側にあるはずです。問題が何であるかについて私は途方に暮れています。

     bg = [[UIImageView alloc] initWithImage:[self crop:rectangle.frame:drawImage.image]];
     [rectangle addSubview:bg];

drawImageはユーザーが描画し、長方形は選択された灰色の領域です。クロップは、特定のrectから特定の画像の一部を返すメソッドです。

また、任意に回転させた画像を貼り付けるのに問題があります。その方法について何かアイデアはありますか?

編集:コードを追加します。

    -(void)drawRect:(int)x1:(int)y1:(int)x2:(int)y2{
     [rectangle removeFromSuperview];
     rectangle = [[UIView alloc] initWithFrame:CGRectMake(x1, y1, x2-x1, y2-y1)]; 
     rectangle.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:0.6];
     selectionImage = drawImage.image;
     drawImage.image = selectionImage;
     [drawImage addSubview:rectangle];
     rectangleVisible = true;
     rectangle.transform = transformation;

長方形の描き方と関係がありますか?(上)touchesMovedメソッド(下)の一部からこのメソッドを呼び出します。これにより問題が発生する可能性があります(タッチ1が間違った位置にあると、幅が負になる可能性がありますか?)、そうであれば、これを修正する簡単な方法はありますか?

     if([[event allTouches] count] == 2 && !drawImage.hidden){
        NSSet *allTouches = [event allTouches];
        UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0];
        UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
        [self drawRect:[touch1 locationInView:drawImage].x :[touch1 locationInView:drawImage].y:
        [touch2 locationInView:drawImage].x :[touch2 locationInView:drawImage].y];   
     }
4

1 に答える 1

2

これがあなたの問題かどうかはわかりませんが、touch1が左上のタッチを表していると想定しているようです。長方形を標準化することから始めます。

// Standardizing the rectangle before making it the frame.
CGRect frame = CGRectStandardize(CGRectMake(x1, y1, x2-x1, y2-y1));
rectangle = [[UIView alloc] initWithFrame:frame]; 
于 2012-07-20T03:13:12.507 に答える