皆さんは私の最後の質問に大いに役立ったので、別の質問をしてみようと思いました。ダークブルーのガラス状の背景と白/グレーのテキストとラベルを使用するテーマでアプリを作成しました。私のアプリのテキストフィールドには、クリアカラーの背景と白いテキストがあり、すべてが非常にうまく表示されます. 私の唯一の懸念は、テキストボックスをタッチして拡大ルーペを取得すると、もちろん白いテキストが白い背景に表示されることです...これは読むことができません. ここで使用可能なルーペを実装する方法について何かアイデアを持っている人はいますか?
3 に答える
残念ながら、ルーペの背景を変更する方法を私が知っている唯一の「公開」方法は、textField.backgroundColor を設定することです。
背景をclearColorとして設定しているため、拡大鏡のデフォルトは白い背景になると思います。そのため、唯一の方法は、backgroundColorを明確でないものとして設定することです。
また、背景を明確に設定したと述べたので、背景を明確にしないことは選択肢ではないと思います。したがって、これを回避する方法について頭の中で考えられる2つの方法は次のとおりです。
- 倍率ループが backgroundColor 実装を呼び出すことによって背景色を取得すると仮定すると (他のあいまいなプライベート API メソッドではありません): backgroundColor メソッドをオーバーライドし、単色を返します。
- 独自のルーペを作成する (おそらく実現不可能)
目的の効果を達成する簡単な回避策を見つけました。私はまた、自分のルーペを作成する完全なプロセスを経験しましたが、自分のルーペを作成するための明確なドキュメントがあり (kiyoshi の回答を参照)、この他の方法はとてつもなく簡単なので、ここに文書化することにしました. 基本的には、白いテキストがルーペに表示されるように、クリアな背景を偽装しているだけです。ビューに使用している背景は、濃い青色の背景に青い煙のように見えます。
代替テキスト http://img231.imageshack.us/img231/9835/beforestatex.jpg
テキストフィールドが表示され、背景が黒のシミュレーターのスクリーンショットを撮ったので、見やすくなりました。
代替テキスト http://img193.imageshack.us/img193/9023/blackfieldx.jpg
次に、そのスクリーンショットを撮り、Photoshop で半透明にし、元の背景画像をオーバーレイして、テキスト フィールドが背景のどこに表示されるかを正確に見つけました。
代替テキスト http://img266.imageshack.us/img266/9493/transparencyfullscreenx.jpg
次に、テキストフィールドの背景として使用される正確なピクセルを新しい PNG にコピーして保存し、背景画像として設定しました。
代替テキスト http://img41.imageshack.us/img41/3450/textboxback.png
forwardToField.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"textboxback.png"]];
画像はルーペ内のパターンとして繰り返されることに注意してください...したがって、エッジを見たくない場合は、テキストフィールドがルーペの高さと幅よりも大きいことを確認してください.
前:
代替テキスト http://img196.imageshack.us/img196/2672/beforex.jpg
後:
代替テキスト http://img23.imageshack.us/img23/2182/afterxd.jpg
これが誰かに役立つことを願っています!
実際、独自のループを作成することはかなり実行可能です。まだアップルに服従しようとしたことがないので、彼らがそれについてどう感じているかわからない。
基本的な考え方は、タッチをオーバーライドすることです。タイマーを使用して、ユーザーが画面に触れている時間を確認します。ルーペは、背後のビューを画像として取得して拡大するUIViewです。
ここでCraftymindからこの記事をチェックしてください
この記事では、ルーパをレンダリングするために、画像全体をキャッシュする必要がありますが、常に変化するもの(つまり、textFields)がある場合は、ループ画像をリアルタイムでレンダリングすることができます。パフォーマンスヒット。