iOS8 Framework使用載入xib及圖片

_阿南_發表於2018-12-10

Cocoa Touch Framework

從iOS8開始Xcode可以直接建立Framework工程了(?),再也不用建立靜態庫,然後再進行修改為Framework。另外在iOS7中使用Framework對於Xib和圖片的引用很不友善,在iOS8也提供了直接的API。

一、建立Framwork工程

新建工程,選擇Framework & Library -> Cocoa Touch Framework, 點選Next,建立FrameworkiOS8的Framework工程。新增FrameworkViewController的class及Xib,再新增一個圖片的Bundle。詳見github的Demo.

FramworkiOS8

標頭檔案的暴露 在TARGETS -> Build Phases -> Headers 將FrameworkViewController.h從Project移到Public中。

標頭檔案暴露

在FrameworkViewController.h中暴露了一個方法- (void)displayImageView; 用來顯示圖片,在FrameworkViewController.m實現

#pragma mark - Public Methods

- (void)displayImageView
{
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    
    UIImage *image = [UIImage imageNamed:@"Images.bundle/LuFei" inBundle:bundle compatibleWithTraitCollection:nil];
    
    self.imageView.image = image;
}
複製程式碼

載入指定的bundle中的PNG檔案。

二、建立測試工程

建立一個工程來測試下Framework:

  1. 新建工程FrameworkTest,將FramworkiOS8編譯生成的FrameworkiOS8.framework檔案copy到FrameworkTest的目錄下。

  2. FrameworkTest工程引入FrameworkiOS8.framework。

  3. 在Targets -> General -> Embedded Binaries 引入framework

    Framework

  4. 在Build Phases -> Copy Bundle Resources 引入framework.

    Copy Bundle Resources

  5. 編寫呼叫Framework的測試程式碼,引入#import <FrameworkiOS8/FrameworkiOS8.h>的標頭檔案。

  6. 執行測試程式碼

#pragma mark - Target Methods

- (IBAction)onClickFrameworkBtn:(id)sender
{
    NSBundle *bundle = [NSBundle bundleForClass:[FrameworkViewController class]];
    
    FrameworkViewController *frameworkVC = [[FrameworkViewController alloc] initWithNibName:@"FrameworkViewController" bundle:bundle];
    
    [self presentViewController:frameworkVC animated:YES completion:^{
        [frameworkVC displayImageView];
    }];
}
複製程式碼
  1. 正確的顯示了Framework中Xib。 ? ^_^
    結果顯示

直接載入Image 直接載入Framework中的圖片

- (IBAction)onClickImageBtn:(id)sender
{
    NSBundle *bundle = [NSBundle bundleForClass:[FrameworkViewController class]];
    
    UIImage *image = [UIImage imageNamed:@"Images.bundle/LuFei" inBundle:bundle compatibleWithTraitCollection:nil];
    
    [self.view setBackgroundColor:[UIColor colorWithPatternImage:image]];
}
複製程式碼

顯示結果

獲取成功。

// END

關於Framework的打包,線上更新等等的功能,請參考其他文獻。不再重複描述。

相關文章