2

プロンプトクラスを備えたJeffLamarcheのアラートビューが、iOS4で使用されたときにほとんど画面外にあるアラートを生成する理由を知っている人はいますか?ダウンロード可能なプロジェクトのすべてのコードはここにあります:

http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html

彼のサンプルプロジェクトは、3.2シミュレーター(iPadでiphoneアプリとして実行)では、適切に中央に配置されているように見えます。しかし、4.0シミュレーターでは、iPhoneデバイスとiPhone 4デバイスの両方で、画面上で非常に高く表示され、ほとんどが画面外に表示されます。他のOSや実際のデバイスではまだテストしていません。

行を変更することによって:

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 130.0); 

に:

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 0.0); 

iOS4では画面の中央に正しく配置されますが、3.2では低すぎます。もちろん、使用しているデバイスやOSに基づいて値を調整することもできますが、オフになっている理由を知りたいと思います。

4

3 に答える 3

1

私は推測していますが、アフィン変換はそもそもハックのように見えます。。。おそらくAppleのUIAlertViewはIOS4.0より前の-130までに翻訳したので、LaMarcheはそれを打ち消すために彼の翻訳を入れました。

その後、4.0では、Appleがそのクラスを修正したと仮定すると、LaMarcheのコードは機能しなくなります。

于 2010-07-14T18:15:05.493 に答える
1

FWIW、私はツイッターでこの交換をしました:

自分:

@jeff_lamarche [リンクが削除されました]によってAlertPromptに出くわしましたが、見栄えがしますが、これ以降、より良いオプションはありますか?

ジェフ:http ://twitter.com/jeff_lamarche/status/21449214776

そのAlertPromptを使用しないでください-プライベートAPIを使用します。最善の策は、オフスクリーンUIViewでデザインしてから、CoreAnimationを使用して表示することです。

于 2010-08-18T01:49:18.547 に答える
0

バージョンテストを実行できます。

    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 4.0) {
        CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 130.0); 
        [self setTransform:translate];
    }

乾杯

于 2011-02-03T18:08:50.500 に答える