2

選択した領域にいくつかの効果を適用できるように、ユーザーが画像の上にフレームを移動できるアプリケーションを作成しようとしています。

ユーザーが画像上のマスクされたフレームを正確にドラッグしてスケーリングできるようにする必要があります。他の写真アプリと同じように、これが正確である必要があります。

私の戦略は、タッチ移動イベントでユーザーのタッチポイントを取得し、それに応じてフレームをスケーリングすることです。それはかなり直感的でした。タッチ移動イベントを処理するために、次のものをコーディングしました。

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{

    UITouch *touch = [touches anyObject];
    CGPoint touchPoint = [touch locationInView:[self view]];


    float currX = touchPoint.x;
    float currY = touchPoint.y;

    /*proceed with other operations on currX and currY, 
      which is coming out quite well*/

}

currXしかし、唯一の問題は、 変数と変数の座標currYが本来あるべき位置にないことです。デバイスからデバイスへとシフトし続ける視差エラーがあります。また、iPad の場合、x 座標と y 座標が入れ替わると思います。

正確なタッチ座標を取得する方法を教えてください。

背景画像は 1 つのビュー ( imageBG) にあり、マスクされたフレームは別のビュー ( ) にありmaskBGます。私は試してみました:

CGPoint touchPoint = [touch locationInView:[maskBG view]];

CGPoint touchPoint = [touch locationInView:[imageBG view]];

...しかし、同じ問題が続きます。また、タッチのエラーが iPhone や iPod よりも iPad の方が悪いことに気付きました。

4

3 に答える 3

0

こんにちは、あなたの問題は、画像と iPhone の画面が必ずしも同じ縦横比ではないということです。タッチ ポイントが実際の画像に正しく変換されない可能性があります。

- (UIImage*) getCroppedImage {
    CGRect rect = self.movingView.frame;
    CGPoint  a;
    a.x=rect.origin.x-self.imageView.frame.origin.x;
    a.y=rect.origin.y-self.imageView.frame.origin.y;

    a.x=a.x*(self.imageView.image.size.width/self.imageView.frame.size.width);
    a.y=a.y*(self.imageView.image.size.height/self.imageView.frame.size.height);

    rect.origin=a;
    rect.size.width=rect.size.width*(self.imageView.image.size.width/self.imageView.frame.size.width);
    rect.size.height=rect.size.height*(self.imageView.image.size.height/self.imageView.frame.size.height);

    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // translated rectangle for drawing sub image 
    CGRect drawRect = CGRectMake(-rect.origin.x, -rect.origin.y, self.imageView.image.size.width, self.imageView.image.size.height);

    // clip to the bounds of the image context
    // not strictly necessary as it will get clipped anyway?
    CGContextClipToRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height));

    // draw image
    [self.imageView.image drawInRect:drawRect];

    // grab image
    UIImage* croppedImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return croppedImage;
}

これは、移動ビューをトリミングするために行ったことです。トリミングに渡す四角形です。画像に正しく反映されるように変換される方法を確認してください。ユーザーが画像を見る画像ビューがアスペクトフィット コンテンツ モードであることを確認してください。

注:-画像ビューの四角形をaspectFit画像に合わせます

これを使用してそれを行う

- (CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize
{
    widthScale = 0;
    heightScale = 0;

    widthScale = boxSize.width/originalSize.width;
    heightScale = boxSize.height/originalSize.height;

    float scale = MIN(widthScale, heightScale);

    CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);

    return newSize;
}
于 2013-02-25T06:17:01.747 に答える