UIImageView的扩展
1.封装网络(使用SDWebImage和AFNetworking框架)下载图片
程序启动的时候就会调用,需要先在这个方法中开始监测网络
|
|
|
|
程序启动的时候就会调用,需要先在这个方法中开始监测网络
|
|
|
|
|
|
|
|
|
|
|
|
|
|
`XYNetManager.h文件中`
#import <Foundation/Foundation.h>
#define kCompletionHandle completionHandle:(void(^)(id model, NSError *error))completionHandle;
@interface XYNetManager : NSObject
/** 对AFHTTPSessionManager的GET请求方法进行了封装 */
+ (id)GET:(NSString *)path parameters:(NSDictionary *)params completionHandler: (void(^)(id responseObj, NSError *error))complete;
/** 对AFHTTPSessionManager的POST请求方法进行了封装 */
+ (id)POST:(NSString *)path parameters:(NSDictionary *)params completionHandler: (void(^)(id responseObj, NSError *error))complete;
/**
* 为了应付某些服务器对于中文字符串不支持的情况,需要转化字符串为带有%号形势
*
* @param path 请求的路径,即 ? 前面部分
* @param params 请求的参数,即 ? 号后面部分
*
* @return 转化 路径+参数 拼接出的字符串中的中文为 % 号形势
*/
+ (NSString *)percentPathWithPath:(NSString *)path params:(NSDictionary *)params;
@end
`XYNetManager.m文件中`
#import "XYNetManager.h"
static AFHTTPSessionManager *manager = nil;
@implementation XYNetManager
+ (AFHTTPSessionManager *)sharedAFManager{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [AFHTTPSessionManager manager];
// 此处添加了 @"text/plain" 这样才能够解析
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"application/json", @"text/json", @"text/javascript", @"text/plain", nil];
});
return manager;
}
//http://cache.tuwan.com/app/?appid=1&class=heronews&mod=八卦&appid=1&appver=2.1
/* URL的结构是 ? 号之前是地址, ?号之后是参数
path:http://cache.tuwan.com/app/
params:@{@"appid":@1, @"class":@"heronews", @"mod":@"八卦", @"appver":@2.1}
*/
//方法:把path和参数拼接起来,把字符串中的中文转换为 百分号 形势,因为有的服务器不接收中文编码
+ (NSString *)percentPathWithPath:(NSString *)path params:(NSDictionary *)params{
NSMutableString *percentPath =[NSMutableString stringWithString:path];
NSArray *keys = params.allKeys;
NSInteger count = keys.count;
/* 习惯
for(int i = 0; i < params.allKeys.count; i ++)
假设for循环循环1000次,params.allKeys实际上调用的[params allKeys], 会调用allKeys1000 次。 OC语言特性是runtime,实际上我们调用一个方法,底层操作是有两个列有方法的列表,常用表和总列表。 CPU先在常用表中搜索调用的方法指针,如果找不到,再到总列表中搜索。 在总列表中搜索你调用的方法所在的地 址,然后调用完毕之后把这个方法名转移到常用方法列表。如果再次执行某个方法就在常用方法列表中搜索调用, 效率更高。但是毕竟每次搜索方法都是耗时的,而swift语言则没有运行时,即没有这个搜索过程。 这是swift比 oc效率高20%的原因。 为了避免搜索耗时,我们在for循环外部就把调用次数算出来,这样每次for循环只需要去 count所在地址读变量值即可。 这样for循环效率更高。
*/
for (int i = 0; i < count; i++) {
if (i == 0) {
[percentPath appendFormat:@"?%@=%@", keys[i], params[keys[i]]];
}else{
[percentPath appendFormat:@"&%@=%@", keys[i], params[keys[i]]];
}
}
//把字符串中的中文转为%号形势
return [percentPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
+ (id)GET:(NSString *)path parameters:(NSDictionary *)params completionHandler: (void(^)(id responseObj, NSError *error))complete{
return [[self sharedAFManager] GET:path parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
complete(responseObject, nil);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
complete(nil, error);
}];
}
+ (id)POST:(NSString *)path parameters:(NSDictionary *)params completionHandler: (void(^)(id responseObj, NSError *error))complete{
return [[self sharedAFManager] POST:path parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
complete(responseObject, nil);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
complete(nil, error);
}];
}
@end
XYConst.h文件中声明(学习官方常量的定义)
#import <UIKit/UIKit.h>
/** 导航栏的最大Y值 */
UIKIT_EXTERN CGFloat const XYNavMaxY;
/** 标题栏的高度 */
UIKIT_EXTERN CGFloat const XYTitlesViewH;
/** tabBar的高度 */
UIKIT_EXTERN CGFloat const XYTabBarH;
/** 全局统一的间距 */
UIKIT_EXTERN CGFloat const XYMargin;
/** tabbarbutton重复点击 */
UIKIT_EXTERN NSString * const XYTabBarButtonDidClickRepeatNotification;
/** 标题按钮重复点击 */
UIKIT_EXTERN NSString * const XYTitleButtonDidRepeatClick;
XYConst.m中实现
#import <UIKit/UIKit.h>
/** 导航栏的最大Y值 */
CGFloat const XYNavMaxY = 64;
/** 标题栏的高度 */
CGFloat const XYTitlesViewH = 35;
/** tabBar的高度 */
CGFloat const XYTabBarH = 49;
/** 全局统一的间距 */
CGFloat const XYMargin = 10;
/** tabbarbutton重复点击 */
NSString * const XYTabBarButtonDidClickRepeatNotification = @"XYTabBarButtonDidClickRepeatNotification";
/** 标题按钮重复点击 */
NSString * const XYTitleButtonDidRepeatClick = @"XYTitleButtonDidRepeatClick";
在监听点击事件中
pod "KRVideoPlayer"
- (IBAction)playRemoteVideo:(id)sender
{// demo 中的示例代码
NSURL *videoURL = [NSURL URLWithString:@"http://krtv.qiniudn.com/150522nextapp"];
if (!self.videoController) {
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat height = [UIScreen mainScreen].bounds.size.height;
self.videoController = [[KRVideoPlayerController alloc] initWithFrame:CGRectMake(0, 0, width, width*(9.0/16.0))];
__weak typeof(self)weakSelf = self;
[self.videoController setDimissCompleteBlock:^{
weakSelf.videoController = nil;
}];
[self.videoController showInWindow];
}
self.videoController.contentURL = videoURL;
}
|
|
终端输入 $ sudo npm install -g hexo-cli
(sudo 执行管理员权限)
true

###关键步骤:关联命令
设置url
_config.yml
文件中的 http://yoursite.com
替换为 http://仓库名.github.io
####hexo/