2013-07-09 92 views
1

我正在玩一個非常小的單一視圖應用程序,以瞭解視圖是如何工作的。我對iOS開發非常陌生。我正在使用一張圖片,作爲我唯一觀點的背景。運行應用程序時,我的背景非常龐大。就好像它被放大或縮放。我正在遵循一個Big Nerd Ranch教程來獲取視圖,因此我使用了一個名爲HypnosisView的UIView的子類。這是暫時的。它也可能值得注意的是,我想用於背景的圖像恰好是640 x 1136像素。窗口/視圖中的背景圖片太大

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    CGRect viewFrame = CGRectMake(0, 0, 640, 1136); 

    HypnosisView *view = [[HypnosisView alloc] initWithFrame:viewFrame]; 
    [view setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"BG.png"]]]; 
    [[self window] addSubview:view]; 

    self.window.backgroundColor = [UIColor blackColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

更新後的代碼嘗試使用0,0,320,568幀實現UIImageView。我還創建了一個320尺寸的背景,然後創建了一個完整大小的背景,並將其命名爲正確的標題。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    CGRect viewFrame = CGRectMake(0, 0, 320, 568); 


    UIImage *background = [UIImage imageNamed:@"[email protected]"]; 
    UIImageView *backgroundView = [[[UIImageView alloc] initWithImage:background] initWithFrame:viewFrame]; 

    [[self window] addSubview:backgroundView]; 
    [[self window] sendSubviewToBack:backgroundView]; 

    self.window.backgroundColor = [UIColor clearColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

所以你的圖像是640到1136,但你說當它顯示在你的UIView中時,圖像實際上大於640到1136? – sangony

+0

它會出現這樣。這就像我只能看到圖像的左上角。 – sdfrien

+0

iPhone 5中UIView的最大可視區域只有320 x 568像素。如果圖像大於該區域,您將只能看到它的一部分。請參閱下面的答案。 – Rick

回答

2

如果您的視圖框架大於您的屏幕,則如果圖片太大,則圖片將被剪裁。您可以使用一個UIScrollView,縮小原始圖像降低到大小或使用如下代碼擴展您的圖像:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
// Override point for customization after application launch. 

CGRect viewFrame = CGRectMake(0, 0, 320, 568); 


UIImage *background = [UIImage imageNamed:@"BG.png"]; 

UIImage *scaledImage = [UIImage imageWithCGImage:[background CGImage] 
              scale:(background.scale * 2.0) 
            orientation:(background.imageOrientation)]; 

UIImageView *backgroundView = [[[UIImageView alloc] initWithImage:scaledImage] initWithFrame:viewFrame]; 

[[self window] addSubview:backgroundView]; 
[[self window] sendSubviewToBack:backgroundView]; 

self.window.backgroundColor = [UIColor clearColor]; 
[self.window makeKeyAndVisible]; 
return YES; 
} 

(我的比例因子是基於640x1136圖像大小)

-1

當你調用[UIImage imageNamed:@"BG.png"]的iOS假設你有兩張圖片,一個叫BG.png這將是大約320x586,並呼籲[email protected]第二圖像這將是640x1136。你應該創建兩個圖像。

或者,您可以使用UIImageView並設置縮放模式。然後將該UIImageView添加到您的窗口。

+0

我試圖創建兩個圖像,我仍然有問題。我也嘗試創建一個UIImageView並將其發送到後面。 – sdfrien

+0

如果您使用UIImageView,則必須將內容模式設置爲類似於UIViewContentModeScaleToFill的內容模式。您還需要將UIImageView的框架設置爲現有視圖的邊界。 –

2

我想你運行你的應用程序和圖像更大的窗口屏幕,所以你認爲該圖像實際上比640 * 1136大?如果我說得對,我可以告訴你爲什麼。這是因爲在編程時,iphone屏幕的高度是568,寬度是320,在你的代碼中,你創建了一個640 * 1136的視圖,它是窗口框架的兩倍。所以最後它只展示了你圖片的一部分。

+0

我調整了我的視圖爲320 * 568,問題仍然存在。 – sdfrien

+0

就是這樣。我只需要調整我的形象。對於我來說,將圖像放大50%是沒有任何意義的,因爲我認爲它會使像素倍增,看起來很糟糕,但它的效果非常好。非常感謝! – sdfrien

+0

@sdfrien如果你想它顯示正確的像素,嘗試創建兩個圖片,一個是320 * 568,另一個是640 * 1136。並將它們命名爲xxxxx.png和[email protected]。然後把兩個圖片放在你的項目中。當您的圖片將顯示在視網膜屏幕上時,系統會自動爲您選擇640 * 1136的圖片。 –

1

從我的經驗,如果你想通過UIView的backgroundColor設置背景圖像,你需要在使用前將圖像縮小到320 x 568。這是因爲view.backgroundColor或[UIColor colorWithPatternImage:]沒有縮放屬性。另外,縮小背景圖片以減小應用程序大小會很好。

如果要使用640 x 1136的圖像,則需要使用UIImageView並指定其內容模式。例如,

imageView.contentMode = UIViewContentModeScaleAspectFit; 

將上面的行添加到您的更新代碼,它應該可以解決您的問題。

+0

我試着按照你的建議設置contentMode,但由於某種原因它仍然保持相同的巨大尺寸。我會盡量減少我的圖像到320 x 568,看看是否能解決它。 THanks – sdfrien

+0

我剛剛注意到了一些東西。您初始化了一個viewFrame,但並未將其應用於背景imageView。這就是爲什麼你的形象仍然放大。添加這個:'backgroundView.frame = viewFrame;' – Rick