2011-01-13 6 views
1

ベースsdk 4.1とiosデプロイメントターゲット= ios4.1を設定しました。 contentScaleFactorは、iOS 4.0以降で使用できます。[imageView respondsToSelector:@selector(contentScaleFactor :)]は常にNOと等しいですか?

if ([imageView respondsToSelector: @selector (contentScaleFactor:)] == YES) 
{ 
    imageView.contentScaleFactor = 1.0; 
} 

なぜ私はいつもNOになるのですか?

+0

なぜ、あなたの展開ターゲットが4.0の場合にこれをチェックするのですか? – omz

答えて

5

contentScaleFactorは、以下のアクセサと、プロパティであるので、それはcontentScaleFactor:に応答しない:

- (CGFloat)contentScaleFactor 
- (void)setContentScaleFactor:(CGFloat) 

:でマーク)単一のパラメーターを受け入れ名前contentScaleFactorを持つ他の方法はありません。

したがって、利用できるセレクタはcontentScaleFactorsetContentScaleFactor:です。あなたはおそらくsetContentScaleFactor:を探しています、それはセッターが呼ばれているものです。

これにあなたのコードを変更

if ([imageView respondsToSelector:@selector(setContentScaleFactor:)] == YES) 
{ 
    // Or as bbum says, use [imageView setContentScaleFactor:1.0]; 
    imageView.contentScaleFactor = 1.0; 
} 
+1

正確;私はドット構文の代わりに、 'respondsToSelector:'テストの文脈を分かりやすくするため、Voloda2は '[imageView setContentScaleFactor:1.0];'を使うべきだと提案します。 – bbum

+0

私は3.2 sdkで警告を受けます。 [imageView setContentScaleFactor:1.0];警告: 'UIView'が '-setContentScaleFactor:'に応答しない可能性があります。 ' この問題を解決するにはどうすればよいですか? – Voloda2

+0

@ Voloda2:コードの更新をお試しください。 – BoltClock

2

セレクタcontentScaleFactor:setContentScaleFactor:あるプロパティのセッターのセレクタ、セレクタcontentScaleFactor、そしてどちらの対応は異なっているので。あなたはこれを実行する必要があります。

if ([imageView respondsToSelector: @selector(contentScaleFactor)]) 
{ 
    imageView.contentScaleFactor = 1.0; 
} 

:は、セレクタ宣言からなくなっています。また、倍率を1.0に設定しても、網膜ディスプレイは利用されません。

+0

あなたのコードでは、 "セレクタ' contentScaleFactor'を確認してから、セレクタ 'setContentScaleFactor:' "でメソッドを呼び出します。それは偶然によってのみ働く。 – bbum

+0

私はこれを知っています。 2つのセレクタが同時に表示されるので(4.0)、コード変更を簡単にしていました。違いを認めているコードサンプルの上の段落に注意してください。 –

関連する問題