iOS 技術淺談之第四篇 (開發框架)

wdfd 9年前發布 | 20K 次閱讀 IOS iOS開發 移動開發

   在iOS開發中不可避免的會用到一些第三方類庫,它們提供了很多實用的功能,使我們的開發變得更有效率;同時,也可以從它們的源代碼中學習到很多有用的東西。下面介紹幾個我開發中常用到的第三方類庫,和大家一起學習下。

一、AFNetworking  AFN 網絡請求

GitHub下載地址:https://github.com/AFNetworking/AFNetworking

AFNetworking 官網地址:http://afnetworking.com

三步導入 AFN 框架的步驟

1.  將框架程序拖拽進項目

2.   添加 iOS 框架引用

SystemConfiguration.framework

MobileCoreServices.framework

3.  修改 xxx-Prefix.pch 文件

#import <MobileCoreServices/MobileCoreServices.h>

#import <SystemConfiguration/SystemConfiguration.h>

AFN 更詳細的使用方法見:http://blog.csdn.net/by3g123/article/details/44490599

當然還有一個更強大的網絡框架 ASHttpRequest(ASI),只是ASI的開發者已經沒有對它進行更新了,在iOS7和iOS8的兼容性存在一些問題,所以現在在使用AFN。下面提供ASI的下載和使用:

GitHub下載地址:https://github.com/pokeb/asi-http-request

API使用參考:http://blog.csdn.net/by3g123/article/details/44490599

二、SDWebImage 圖片異步加載及緩存</span>

GItHub下載地址:https://github.com/rs/SDWebImage

GItHub下載地址:https://github.com/JJSaccolo/UIActivityIndicator-for-SDWebImage


SDWebImage用于異步下載網絡上的圖片,并支持對圖片的緩存等。多數情況下是使用UIImageView+WebCache為UIImageView異步加載圖片:

#import <SDWebImage/UIImageView+WebCache.h>
// ...
[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]  placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
   需要注意的是,pladeholderImage 的大小一定要大于UIImageView的大小,否則可能不顯示placeholderImage圖片。</span>


它還支持block語法用于在加載完成時做一些操作:

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]                      completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {... completion code here ...}];
SDWebImage并不局限于UIImageView上,使用SDWebImageManager完成更多的操作:


SDWebImageManager *manager = [SDWebImageManager sharedManager];[manager downloadWithURL:imageURL                 options:0                 progress:^(NSUInteger receivedSize, long long expectedSize)                 {    
                 // 下載進度        
         }                 completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)                 {                     if (image) {  
                       // 下載完成                                                }           
      }];
    或者使用Image Downloader也是一樣的效果:


[SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL        options:0       progress:^(NSUInteger receivedSize, long long expectedSize)       {       
    // 進度       
}  completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished) {           
     if (image && finished)  {          
     // 下載完成         
      }      
 }];


UIActivityIndicator-for-SDWebImage 為SDWebImage顯示加載效果,用于為SDWebImage在UIImageView加載圖片時,顯示加載效果(UIActivityIndicatorView實現),它提供以下方法:

- (void)setImageWithURL:(NSURL *)url usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;

  • (void)setImageWithURL:(NSURL )url placeholderImage:(UIImage )placeholder usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
  • (void)setImageWithURL:(NSURL )url placeholderImage:(UIImage )placeholder options:(SDWebImageOptions)options usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
  • (void)setImageWithURL:(NSURL )url completed:(SDWebImageCompletedBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;- (void)setImageWithURL:(NSURL )url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletedBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
  • (void)setImageWithURL:(NSURL )url placeholderImage:(UIImage )placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletedBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;
  • (void)setImageWithURL:(NSURL )url placeholderImage:(UIImage )placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock)progressBlock completed:(SDWebImageCompletedBlock)completedBlock usingActivityIndicatorStyle:(UIActivityIndicatorViewStyle)activityStyle;</pre>    更詳細的使用見:http://hackemist.com/SDWebImage/doc/ </div>

    如果你只是匆匆忙忙下載了一個framework 就回到了自己工程,可能會遇到無法使用的情況:那么下面的文章來解決你遇到的問題:

    http://blog.csdn.net/qjlhlh/article/details/8191111


    三、JSONKit 數據解析

    GItHub下載地址:https://github.com/johnezang/JSONKit

    JSONKit提供比SBJson更優異的性能以及更加簡便的使用方法,但是中文最好使用utf-8格式(/uXXXX),否則容易造成亂碼。

    API調用起來非常簡單,省去了SBJson那么一大堆的方法:

    JSONDecoder* decoder = [[JSONDecoder alloc] initWithParseOptions:JKParseOptionNone];id result = [decoder objectWithData:jsonData];
       詳細的使用方法請看它的GitHub主頁。


    四、MBProgressHUD 提示效果

    GitHub下載地址:https://github.com/matej/MBProgressHUD

    一般會在.m文件實現MBProgressHUDDelegate協議,并聲明HUD變量:

    @interface SampleViewController ()<MBProgressHUDDelegate>{ 
     MBProgressHUD *HUD;
    }
    #pragma mark MBProgressHUDDelegate methods
  • (void)hudWasHidden:(MBProgressHUD *)hud { // Remove HUD from screen when the HUD was hidded [HUD removeFromSuperview]; HUD = nil; }</pre>


    在執行某個異步請求時開始調用:
    </div>


    HUD = [MBProgressHUD showHUDAddedTo:self.webView animated:YES]; 
     HUD.labelText = @"正在請求...";  
    // mode參數可以控制顯示的模式   
    HUD.mode = MBProgressHUDModeText;    HUD.delegate = self;


    請求完成時隱藏提示效果:

    [HUD hide:YES];


    對于同步方法一般都是用showWhileExecuting方法,方法執行完成之后會自動隱藏提示效果:

    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];


    類似的框架還有:SVProgressHUD 、ZAActivityBar 

    GitHub下載地址:https://github.com/samvermette/SVProgressHUD

       GitHub下載地址:https://github.com/zacaltman/ZAActivityBar


    五、PullToRefresh 下拉刷新

    GitHub下載地址:https://github.com/leah/PullToRefresh

    PullToRefresh提供比EGOTableViewPullRefresh更加簡單的使用方法,只要繼承自PullRefreshTableViewController,再實現refresh方法即可:

    - (void)refresh {    // 加載數據
      [self.tableView reloadData]; // 重新載入UITableView
      [self stopLoading]; //停止動畫
    }


    類似的框架還有:EGOTableViewPullRefreshSTableViewController

    GitHub下載地址:https://github.com/enormego/EGOTableViewPullRefresh

         GitHub下載地址:https://github.com/shiki/STableViewController



    暫時就介紹這幾個了,如還有很好用的希望大家可以提供給我。




    最近在深入學習AFN框架中,希望大家可以 一起交流。

    來自:http://blog.csdn.net/by3g123/article/details/44645331
 本文由用戶 wdfd 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!