0

画像があり、その一部をトリミングしています。問題は、シミュレーターでは正しく表示されますが、デバイスでははるかにズームインされていることです。かなりの違いがあります。私は何が間違っているのですか?(最初の画像はシミュレーターからのもので、2番目はiphoneデバイスからのものです)

// create bounds and initialise default image 
CGRect imageSizeRectangle = CGRectMake(0, 0, 300, 300);
UIImage *df_Image =  [UIImage imageNamed:@"no_selection.png"];
self.imageView = [[UIImageView alloc] initWithFrame:imageSizeRectangle];
[imageView setImage:df_Image];
[self.view addSubview:imageView];

//crop image 
CGRect test = CGRectMake(0, 0, 150,150);
CGImageRef imageRef = CGImageCreateWithImageInRect([photo.image CGImage], test);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef);

これがシミュレーターでの表示方法です(正しく)

デバイス上でどのように見えるか

4

2 に答える 2

1

ここでの問題は、網膜デバイスが通常のデバイスの2倍のサイズであるということです。次の方法で、デバイスが網膜であるかどうかを確認できます。

+(BOOL)iPhoneRetina{
return ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))?1:0;
}

BOOLそして、返された値に応じて、rectのサイズを増減します。

注*displayLinkWithTarget:selector:は、iOS 4.0以降で機能するランダムな方法ですが、以前のバージョンでは機能しません。あなたはそれに多くの注意を払う必要はありません。

編集*

CGRect rect;
if([self iPhoneRetina]){rect = CGRectMake(0,0,300,300);}//Retina
else{rect = CGRectMake(0,0,150,150);}//Non retina

//Then the rest of your code
于 2012-08-21T23:00:52.880 に答える
1

コードを単純化したい場合は、

CGRectMake(0,0,[UIScreen mainScreen].scale*150,[UIScreen mainScreen].scale*150)
于 2012-08-22T07:32:16.360 に答える