你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 一個iOS項目總結:界面

一個iOS項目總結:界面

編輯:IOS開發綜合

今年暑假,自己獨立完成了一個簡單的iOS的APP,是一個bbs的客戶端,叫做喻信星空。現在正在測試,准備將其上架app store。

正文

LaunchImage的缺失問題

對於iOS的應用,有一個特點就是必須要有一張LaunchImage,在工程的設置裡可以進行設置,LaunchImage可以有兩種選擇一個是自己提供圖片,另一個是LaunchScreen.storyboard。
如果LaunchImage缺失,在iPhone5以後的設備上會出現無法全屏的問題,在應用的上方和下方會有兩條黑條,如下方圖片。
一個iOS項目總結:界面

而且編譯時會出現警告:Missing "[email protected]" launch image,當你點擊這個警告時,Xcode會提示你是否添加一張啟動圖片,如果你選擇添加,Xcode則會幫你添加一張全黑的640?×?1136的啟動圖片,而此時再次編譯運行,你會發現應用剛啟動時是黑屏,進入應用後不能全屏的問題消失了。

當然你可以用自己的啟動圖片來替換這張啟動圖,或者是使用stZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcnlib2FyZKOstvjU2s7Sv7TAtMq508NzdG9yeWJvYXJk06a4w7vhuPy6w6Osc3Rvcnlib2FyZLK7vfbS19PaysrF5LK7zazJ6LG4o6zSssrHxru5+8v5zca89rXEoaM8L2NvZGU+PC9wPg0KPGgzIGlkPQ=="啟動動畫">啟動動畫

現在的應用大多都有啟動動畫,當然我也想加在這個客戶端中,而iOS的APP又必須要有LaunchImage,那為何不將LaunchImage和啟動動畫結合在一起,想到這裡我十分激動,這樣的結合感覺十分完美。

於是到網上搜索了一番,發現了將這二者結合起來的方法:

UIViewController *viewController = [[UIStoryboard storyboardWithName:@"LaunchScreen" bundle:nil] instantiateViewControllerWithIdentifier:@"LaunchScreen"];

通過此法,便能得到LaunchScreen的VC,如此問題便簡單多了,通過這個VC獲取VC的view,用這個view便可以制作動畫了,如下圖。

一個iOS項目總結:界面

一個iOS項目總結:界面

登錄界面

登錄界面看似簡單,但也是有玄機在這其中,比如鍵盤的適配,當點擊輸入框,鍵盤便會彈出,此時就有可能遮擋住登錄按鍵或是其他輸入框,這個問題該如何解決呢,其實不難,iOS中在鍵盤狀態改變時會發送全局通知,只要注冊觀察者接收這些通知即可,需要注意的是注冊的通知最好是WillShow和WillHiden,這樣會顯得自然些,不然會有比較嚴重的延遲:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];

然後在這下面兩個方法裡處理鍵盤彈起和收回的情況,在

- (void)keyboardWasShown:(NSNotification *)notification {
    NSDictionary *info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.f, 0.f, kbSize.height, 0.f);
    self.backgroundView.contentInset = contentInsets;
    self.backgroundView.scrollIndicatorInsets = contentInsets;

    CGRect rect = self.loginButton.frame;
    rect.size.height += rect.size.height;
    [self.backgroundView scrollRectToVisible:rect animated:YES];

}
- (void)keyboardWillBeHidden {
    self.backgroundView.contentInset = UIEdgeInsetsZero;
    self.backgroundView.scrollIndicatorInsets = UIEdgeInsetsZero;
}

系統發送的通知中,包含了鍵盤高度的信息,拿到這個高度後,便可以將登錄的界面向上移動。

這裡我的登錄界面是放在一個UIScrollView之上,其實和微信的登錄界面有些相似,可以隨著你的手指上下滾動,我很同意我一個同事的說法,他說每個界面都應該是一個ScrollView,都應該能夠響應用戶是手勢,就是用戶在滑動或是拖動的時候,都應該去響應,我覺得這會讓用戶覺得很爽,會讓人覺得比較靈動。

封裝簡單的tabbar

由TabBar和幾個VC作為主界面的應用很是常見,當然系統提供了UITabBarController和UITabBar,不過如果想要定制想要的樣式的tabbar,用系統的似乎就有些困難了,像tabbar這樣並不復雜的控件,自己寫一個是很方便的,我想要一個只有圖片沒有文字的tabbar,於是就自己寫了一個DPTabBar。

首先封裝一個DPTabBarItem,繼承自UIButton,其實想來也簡單,tabbar中不同的tab其實就是幾個button,此處使用button作為cell十分合適,而且button具有選中和不選中的屬性,而且可以為兩種狀態設置不同的圖片,在此處十分適合。

@interface DPTabBarItem : UIButton

- (instancetype)initWithImage:(UIImage *)image selectedImage:(UIImage *)selectedImage;

@end

隨後便是封裝TabBar了

@class DPTabBarItem;

@protocol DPTabBarDelegate;

@interface DPTabBar : UIView

@property (nonatomic, readwrite, weak) id delegate;
@property (nonatomic, readwrite, assign) NSUInteger selectedIndex;

- (instancetype)initWithTabBarItems:(NSArray *)items;

@end

初始化方法只有一個,便是使用DPTabBarItem進行初始化,如果不設置最開始的selectedIndex,則默認為0,此外還有兩個屬性一個表示被選中的tab,另一個是代理,該代理定義如下:

@protocol DPTabBarDelegate 

- (void)itemDidSelectAtIndex:(NSUInteger)index;

@end

當選中的Tab變化時,調用此代理方法,代理根據index來調整顯示的頁面。

  1. 上一頁:
  2. 下一頁: