興味深いアプリのようなサウンドです!私はUITableView
を使用すると、アプリがひどく複雑になると言います。 UIScrollView
は、コントロールをドラッグアンドドロップするのに適しています。おそらく、「ページを追加」ボタンを使用すると、ユーザーはこれを必要に応じてタップすることができ、UIScrollView
のcontentSize
を+1ページの幅に拡張してスクロールして、そのページにコントロールをドラッグすることができます。
コントロールをドラッグすると、各コントロールにUIPanGestureRecognizerを使用できます。トリガーされると、コントロールの中央の位置が変更されます。これらのコントロールの一部とのユーザーのやりとりを無効にする必要があります。 UITextField
の場合、パワーユーザーはそれをドラッグしたいが値を入力したくない。
コントロールをグループ化するためには、このような何かを行うことができます:
- ユーザーはこのモードに入るようにボタンをタップすることにより、「グループモード」は、その後、コントロールの数(いくつかの視覚的な表示を必要とするタップそれらが選択されていることを示すために)、次にタップが行われます。
- 選択したコントロールがUIScrollViewから削除されます
- 新しいUIViewが作成され、選択されたコントロールの中心点に配置され、コントロールが同じ距離だけ離れて収まるように大きくなります。スクロールビューのサブビューとして追加されます
- コントロールはすべてこのビューのサブビューとして追加されます
- 個々のコントロールではなく、このビューにジェスチャレコグナイザが追加されています。ドラッグすると、このグループのコントロールはすべて固定レイアウトのグループとして移動します。
一般的に使用される可能性のあるコントロールのグループがある場合は、事前にそれらをそれぞれ独自のペン先に作成し、ユーザーがスクロールビューにドラッグして、作ったグループ。
特に、いくつかのコントロールがかなり大きい場合(たとえば、画像ビューがラベルやテキストフィールドよりも大きくなることが予想される場合)、パンジェスチャレコグナイザはビットを制限します。なぜなら、ビューをドラッグすると、近くに配置されているか重複している場合は間違って間違ったビューを選択します。その場合は、すべてのタッチイベントを自分で処理する必要があります。タッチが始まると、すべてのコントロール(またはグループ)に対してテストして、タップ位置に最も近い中心を確認してからあなたはこの中心の位置を更新することができますタッチ移動イベントを取得します。
私はあなたが描いているものほど複雑ではありませんでしたが、ユーザーが小さな画像を大きな画像にドラッグして「装飾」として適用できるアプリを作っていました。彼らは、これらの装飾の任意の数にドラッグして、ピンチのジェスチャーでそれらを拡大縮小することもできます。この場合、メイン画像を保持する背景としてUIImageViewを使用しました。その後、装飾は画像の端にあり、パンのジェスチャ認識装置が画像上にドラッグされていることを検出するために使用されました。ドラッグすると、実際には装飾の新しいインスタンス(UIImageView)が作成され、ツールボックスにはもう1つ残っていました。ピンチジェスチャ認識装置を使用して、装飾をスケール調整した。ユーザーが既に配置したデコレーションの周りを移動するには、手作業によるタッチ処理を使用して適切なデコレーションを検出する必要がありました(UIViewの面では、ユーザーが別のものをドラッグしようとしたときに、誤って1つの角をドラッグすることは容易でした)。マッチングジェスチャ認識と手動タッチ処理を混在させるとうまくいきました。ピンチングのようなより複雑な振る舞いにジェスチャ認識機能を使用するほうが簡単だったので、これはうまくいきました。
パワーユーザーがすべてを設定したら、通常のユーザーがアプリを読み込んだときに、タッチ操作コードをオフにして(ジェスチャ認識ツールを削除するか作成しない)パワーユーザーによってレイアウトされた静的フォームを取得します。次に、すべてのコントロール(たとえば)でユーザーとのやりとりが有効になっていることを確認し、ユーザーにデータを入力できるようにします。
上記のすべてのコントロールをスクロールビューに表示すると、私は思っているほど複雑になります。通常のユーザーとパワーユーザーの両方でうまく動作するようにするために、たくさんのかわいい振る舞いに対処する必要があります。 UITableViews
とUITableCells
を同時に扱っていると、これは100倍の難しさになると思います。
私はあなたのアプリと共通の機能のかなりのチャンクを持っているように私はあなたが上記のアプリの任意の側面について詳述したい場合はお知らせください。将来あなたのアプリについてもっと見たり聞いたりしたいと思っています!
EDIT
もう一つは、私に起こった - あなたはあなたのソリューションにUITableView
を使用することに熱心であれば、その後、私はあなたのパワーユーザーは、一度に1つのUITableViewCell
をレイアウトすることを示唆しています。実際には、UILabels
と他のコントロールをちょうど基本的なUIViewにドラッグすると、終了したらコントロールの位置を記録するために使います。次に、これらのコントロールをセルに表示するときにこれらの位置を使用します。cellForRowAtIndexPath
では、選択したすべてのコントロールを作成して初期化し、パワーユーザーが選択した位置とレイアウトで新しく作成されたセルに配置します。パワーユーザーは、柔軟性を高めるために、レイアウト中のセルの高さを変更するコントロールを持つこともできます。彼らは、一連のセルレイアウトを順番に作成します(これらのそれぞれがコントロールの「グループ」になると思います)。そして、それらのセルがテーブルビューで順番に表示されます。パワーユーザーは、セルを並べ替えることができるように(またはいくつかを削除することもできるように)、テーブルを編集モードにすることによって最終的な微調整を行うことができます。
アプリケーションに応じて、おそらくユーザは以前に作成したセルレイアウトを使用することもできます。そのため、いくつかの共通コントロールグループを構築した後、それらを再利用して、フォーム。そして、時折、彼らは今までに作成したものがどれも適切でないときに新しいセルレイアウトを作成し、再び将来のフォームで再び使用するためのテンプレートとして保存されます。
UITableViewを使用したい場合は、どのように動作するかについていくつか考えてください。 –
私の考えを助けてくれたあなたのコメントにとても感謝しています。 – Journeyman