現在、iOSアプリを作成していますが、「文字をドロップする」だけでUILabelの文字を削除する機能を実装したいと思います。私が問題を抱えているのは、UILabelの個々の文字にジェスチャ認識機能を追加することです。私はすでにこれをWebで検索しましたが、何もありません。明確にするために、ラベル全体にジェスチャ認識機能を追加するのではなく、個々の文字に追加するだけです。どんな助けでも大歓迎です。
ありがとう
現在、iOSアプリを作成していますが、「文字をドロップする」だけでUILabelの文字を削除する機能を実装したいと思います。私が問題を抱えているのは、UILabelの個々の文字にジェスチャ認識機能を追加することです。私はすでにこれをWebで検索しましたが、何もありません。明確にするために、ラベル全体にジェスチャ認識機能を追加するのではなく、個々の文字に追加するだけです。どんな助けでも大歓迎です。
ありがとう
それを行う最も簡単な方法は、文字の位置を動的に計算することだと思われます。これを使って:
CGSize textSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:size]
constrainedToSize:constrainedSize
lineBreakMode:NSLineBreakByWordWrapping];
したがって、フォント内の文字のサイズと各ラベルに使用しているサイズを取得し、[stringInstance length]
プロパティと[UILabel numberOfLines]
プロパティを使用してラベル内の各文字のおおよその中心を取得し、各ラベルとで単純なtapGestureRecognizerを使用できます。そこにあなたのメソッドを呼び出します
- (NSString*)letterForPoint:(CGPoint)tapCenter inLabel:(UILabel*)label;
そこで、すべてを使用して各文字のおおよその中心を計算し、エラーのselectableRangeを追加して、x+-20ピクセルおよびy+-20ピクセルとして応答するユーザーを修正します。
Appleによれば、40ピクセルに対して40ピクセル未満の選択可能な境界を持つものはすべてユーザーにとって完全に迷惑になるため、ユーザーの操作にはフォントサイズを実際にかなり大きくする必要があります。
私が正しく理解していれば、UILabelをサブクラス化することは理にかなっているように思えます。
クラスを作成し、initでGestureRecognizerLetterLabel: UILabel
を自分でセットアップします。
次に、文字を作成すると、それぞれに認識機能が付加されます
LetterLabel *firstLetter = [[LetterLabel alloc] init]
LetterLabel *secondLetter = [[LetterLabel alloc] init]
UIGestureRecognizerは、UIViewまたはそのサブクラス(たとえば、Adamが提案したUILabel)にのみ適用できます。パフォーマンスが心配な場合は、次のステップは次のようになると思います。
1)UILabelのようなビューのカスタム実装を作成するためにUIViewをサブクラス化します。
2)drawInRect:メソッドでカスタムラベルの文字列を描画します
3)touchesBegan:withEvent:、touchesMoved:withEvent:、およびtouchesEnded:withEvent:メソッドを使用して、バッキング文字列の文字を移動/再描画するために指の位置を追跡します。
編集:
または、カスタムラベルで1つのUIPanGestureRecognizerを使用して指の位置を追跡し、カスタムラベルの境界内でサブレイヤー内を移動することもできます(各サブレイヤーには文字列に文字を含めることができます)。このようにして、Core Animationをより簡単に利用して、キャラクターをアニメーション化できます(つまり、「ドロップ」効果を作成できます)。