3

添付の1は、GeniusScanというアプリのスクリーンショットで、任意のドキュメントを撮影でき、調整可能な長方形のグリッドがimageviewに表示されます。グリッドの境界線を指で簡単に調整して、スキャンする画像の部分を選択できます。その後、正しい見込み客に変換されます。

1-イメージビューでグリッドを描画して操作するにはどうすればよいですか?

2-グリッドのコーナーポイントをViewControllerに戻すにはどうすればよいですか。

ここに画像の説明を入力してください

更新:BJImageCropperという素晴らしいクラスを見つけました。このクラスでは、指を使って境界線を調整できますが、長方形のようなボックスの場合のみです。GeniusScanアプリのように形状をサポートするように更新する方法を誰かが提案できますか?

4

2 に答える 2

5

お前:

両方の質問を解決するデモを作成しました。

1-イメージビューでグリッドを描画して操作するにはどうすればよいですか?

UIPanGestureRecognizerを追加し、ビューの上にCAShapeLayerを使用してグリッドを描画することにより、インタラクティブなコントロールポイントとして機能する4つのビューを追加します。

2-グリッドのコーナーポイントをViewControllerに戻すにはどうすればよいですか。

グリッドの4つのコントロールポイントへの参照を保持する必要があります。

これが私のコードへのリンクです。

于 2012-12-02T10:54:24.153 に答える
2

これは実際にはUIImageViewの上に描画されていません。これは、実際にはUIImageViewの上のオーバーレイ(ビュー)です。4つのポイントを追跡する必要があり(レイヤーのサブビューとして4つのビューがあります)、それらの位置を追跡し、移動したらdrawRect:、4つのポイントに基づいて線を描画するために使用します。

私がアプリに実装した方法は、UIImageViewを透明な「SelectionView」(私が作成したカスタムビュー)でオーバーレイすることです。selectionViewには、クラス'Vertex'の4つのカスタムサブビューが含まれています。頂点は、ユーザーがタッチ/移動するたびに、プロトコルメソッドを介してselectionViewに戻ります(実際には、どの頂点が移動したかは重要ではなく、移動しただけです)。

- (void)vertexMoved:(Vertex *)vertex;

次に、selectionViewは再描画が必要であることを認識しているため、バウンディング長方形の実際の描画を行うsetNeedsDisplay内部呼び出しdrawRect(絶対に呼び出さないでください)を呼び出す呼び出しを呼び出します。drawRect基本的に、各頂点を反復処理し、Quartz APIを使用して線を描画し、半透明/中空の色で塗りつぶします。

これは私が少なくともそれをしている方法です、私は他の方法があると確信しています。

于 2012-11-27T22:37:09.530 に答える