1

ユーザーがアップロードした画像の上にボックスを作成して、ユーザーがXクロッピングアスペクト比に合わせて画像をトリミングできるようにする方法を見つけようとしています(ボックスにはXの最小幅と高さがあり、ボックスのアスペクト比が定義されています)。

クロッピングボックスで遊ぶリポジトリを見つけることができましたが、アスペクト比機能を備えたリポジトリはありませんでした。したがって、他の人がそれをどのように達成したかを確認できるように、その方法を学ぶことができるチュートリアルや、達成したいことを行うレポを誰かが教えてくれるかどうか疑問に思っていました。

4

3 に答える 3

1

ここにはいくつかの課題があります。1 つはクロッピング コントロールを提示してドラッグするための UI であり、より単純なものはクロッピング コントロールを制限するための計算です。後者のヒントは次のとおりです。

@interface CropBox : NSObject

@property (assign, nonatomic) CGRect box;
@property (assign, nonatomic)  CGFloat aspect;  // set this to 16.0/9.0=1.77 e.g. to get 16:9

- (void)setOrigin:(CGPoint)origin;
- (void)setWidth:(CGFloat)width;
- (void)setHeight:(CGFloat)height;

@end

@implementation CropBox

- (void)setOrigin:(CGPoint)origin {

    self.box = CGRectMake(origin.x, origin.y, self.box.width, self.box.height);
}

- (void)setWidth:(CGFloat)width {

    CGFloat height = width / self.aspect;
    self.box = CGRectMake(self.box.origin.x, self.box.origin.y, width, height);
}

- (void)setHeight:(CGFloat)height {

    CGFloat width = height * self.aspect;
    self.box = CGRectMake(self.box.origin.x, self.box.origin.y, width, height);
}

@end
于 2013-06-16T18:01:57.957 に答える
0

正確なコードを公開することはできません。しかし、これは大まかに行った方法です。私の場合、ピンチで UIImageView のサイズを変更できるようにしたかったのです。あなたの場合、これは単純な長方形になる可能性があります。その場合、関数のロジックだけがhandlePinch:それに応じて変更されます。
ピンチ ジェスチャ レコグナイザーを初期化し、ターゲット ビューに追加します。

UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinch:)];
[imageview addGedtureRecognizer:pinchGesture];

実際のジェスチャ ハンドラ コード。ジェスチャ ハンドラー コードについては、このページを参照しました。

- (void)handlePinch:(UIPinchGestureRecognizer *)recognizer 
{    
    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;    
}

サイズ変更の場合は、このページの方法をCGRect調べる必要があります。CGAffineTransformScale の 2 番目と 3 番目の引数は、それぞれ X 方向と Y 方向のスケーリング係数です。アスペクト比を初期値と同じに維持する上で重要なことは、これらの両方の値を同じにすることです。お役に立てれば。私が何かを明確にしていない場合に備えてコメントしてください。CGRectApplyAffineTransform

于 2013-06-17T00:25:23.743 に答える