iOS中怎么设置ios mjrefresh github框架的背景色

MJRefresh–用法最简单的下拉刷新框架 - 推酷
MJRefresh–用法最简单的下拉刷新框架
用于为应用添加常用的上拉加载更多与下拉刷新效果,适用 UIScrollView 、 UITableView 、 UICollectionView 、 UIWebView.
通过CocoaPods安装
pod 'MJRefresh'
将 MJRefresh 文件夹中的所有文件拽入项目中,在需要的地方导入主头文件:
#import &MJRefresh.h&
MJRefreshComponent.h
/** 刷新控件的基类 */
@interface MJRefreshComponent : UIView
#pragma mark - 刷新状态控制
/** 进入刷新状态 */
- (void)beginRefreshing;
/** 结束刷新状态 */
- (void)endRefreshing;
/** 是否正在刷新 */
- (BOOL)isRefreshing;
#pragma mark - 其他
/** 根据拖拽比例自动切换透明度 */
@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeA
MJRefreshHeader.h
@interface MJRefreshHeader : MJRefreshComponent
/** 创建header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 创建header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** 这个key用来存储上一次下拉刷新成功的时间 */
@property (copy, nonatomic) NSString *lastUpdatedTimeK
/** 上一次下拉刷新成功的时间 */
@property (strong, nonatomic, readonly) NSDate *lastUpdatedT
/** 忽略多少scrollView的contentInset的top */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetT
MJRefreshFooter.h
@interface MJRefreshFooter : MJRefreshComponent
/** 创建footer */
+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 创建footer */
+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** 提示没有更多的数据 */
- (void)noticeNoMoreData;
/** 重置没有更多的数据(消除没有更多数据的状态) */
- (void)resetNoMoreData;
/** 忽略多少scrollView的contentInset的bottom */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetB
/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏) */
@property (assign, nonatomic) BOOL automaticallyH
MJRefreshAutoFooter.h
@interface MJRefreshAutoFooter : MJRefreshFooter
/** 是否自动刷新(默认为YES) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyR
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoR
下拉刷新01-默认
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 马上进入刷新状态
[self.tableView.header beginRefreshing];
下拉刷新02-动画图片
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 设置普通状态的动画图片
[header setImages:idleImages forState:MJRefreshStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
[header setImages:pullingImages forState:MJRefreshStatePulling];
// 设置正在刷新状态的动画图片
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置header
self.tableView.header =
下拉刷新03-隐藏时间
// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;
下拉刷新04-隐藏状态和时间
// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;
// 隐藏状态
header.stateLabel.hidden = YES;
下拉刷新05-自定义文字
// 设置文字
[header setTitle:@&Pull down to refresh& forState:MJRefreshStateIdle];
[header setTitle:@&Release to refresh& forState:MJRefreshStatePulling];
[header setTitle:@&Loading ...& forState:MJRefreshStateRefreshing];
// 设置字体
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// 设置颜色
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
下拉刷新06-自定义刷新控件
self.tableView.header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 具体实现参考MJDIYHeader.h和MJDIYHeader.m
上拉刷新01-默认
self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
上拉刷新02-动画图片
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 设置刷新图片
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置尾部
self.tableView.footer =
上拉刷新03-隐藏刷新状态的文字
// 隐藏刷新状态的文字
footer.refreshingTitleHidden = YES;
// 如果没有上面的方法,就用footer.stateLabel.hidden = YES;
上拉刷新04-全部加载完毕
// 变为没有更多数据的状态
[footer noticeNoMoreData];
上拉刷新05-自定义文字
// 设置文字
[footer setTitle:@&Click or drag up to refresh& forState:MJRefreshStateIdle];
[footer setTitle:@&Loading more ...& forState:MJRefreshStateRefreshing];
[footer setTitle:@&No more data& forState:MJRefreshStateNoMoreData];
// 设置字体
footer.stateLabel.font = [UIFont systemFontOfSize:17];
// 设置颜色
footer.stateLabel.textColor = [UIColor blueColor];
上拉刷新06-加载后隐藏
// 隐藏当前的上拉刷新控件
self.tableView.footer.hidden = YES;
上拉刷新07-自动回弹的上拉01
self.tableView.footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
上拉刷新08-自动回弹的上拉02
MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 设置普通状态的动画图片
[footer setImages:idleImages forState:MJRefreshStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
[footer setImages:pullingImages forState:MJRefreshStatePulling];
// 设置正在刷新状态的动画图片
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置尾部
self.tableView.footer =
上拉刷新09-自定义刷新控件(自动刷新)
self.tableView.footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 具体实现参考MJDIYAutoFooter.h和MJDIYAutoFooter.m
上拉刷新10-自定义刷新控件(自动回弹)
self.tableView.footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 具体实现参考MJDIYBackFooter.h和MJDIYBackFooter.m
UICollectionView01-上下拉刷新
// 下拉刷新
self.collectionView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
// 上拉刷新
self.collectionView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
UIWebView01-下拉刷新
// 添加下拉刷新控件
self.webView.scrollView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示IOS整理笔记 - The important thing in life is to have a great aim ,and the determination to attain it!
-- Freeman - ITeye技术网站
博客分类:
10月26号整理
1.获得项目中info.plist文件的内容
1& [NSBundle mainBundle].infoDictionary
2& 版本号在info.plist中的key:kCFBundleVersionKey
2.自定义控制器的view
重写loadView方法(不需要调用[super loadView])
3.控制器view的高度和状态栏的关系
创建控制器的view时,系统会检测状态栏是否显示
* 如果有状态栏,那么控制器view的高度是460(iPhone5中是548)
* 如果没有状态栏,那么控制器view的高度是480(iPhone5中是568)
4.[UIScreen mainScreen].applicationFrame的取值
以3.5inch为例(320x480)
1& 没有状态栏,applicationFrame的值{{0, 0}, {320, 480}}
2& 有状态栏,applicationFrame的值{{0, 20}, {320, 460}}
5.按钮的状态
UIControlStateNormal
普通(默认的状态)
UIControlStateHighlighted
高亮(用户长按的时候)
UIControlStateDisabled
失效(通过代码控制:enabled属性)
UIControlStateSelected
选中(通过代码控制:selected属性)
6.错误调试技巧
1& 一个控件无法显示出来的可能原因
* 没有宽高(宽高为0)
* 位置不对
* hidden=YES
* 没有被addSubview到屏幕上
2& 一个UIScrollView无法滚动
* contentSize没有值
* 不能接收到触摸事件
3& 一个控件无法跟用户交互(无法接收事件)的可能原因
* (父控件的)userInteractionEnabled = NO;
* (父控件的)hidden = YES
* (父控件的)alpha &= 0.01
* (父控件的)背景是clearColor
7.按钮的设置
// 高亮状态下不更改图片的颜色
self.adjustsImageWhenHighlighted = NO;
// 是否选中状态
self.selected = YES;
// 是否可用状态
self.enabled = YES;
10月27号整理
一、按钮的设置
0.设置背景图片
[btn setBackgroundImage:image forState:UIControlStateNormal];
1.设置内部UIImageView的图片
[btn setImage:image forState:UIControlStateNormal];
// 不能写成btn.imageView.image =
2.设置内部UILabel的文字
[btn setTitle:@"43" forState:UIControlStateNormal];
// 不能写成btn.titleLabel.text = @"43";
3.调整内部ImageView的frame
- (CGRect)imageRectForContentRect:(CGRect)contentRect
4.调整内部UILabel的frame
- (CGRect)titleRectForContentRect:(CGRect)contentRect
5.覆盖父类在highlighted时的所有操作
- (void)setHighlighted:(BOOL)highlighted { }
6.文字居中
self.titleLabel.textAlignment = NSTextAlignmentC
7.文字大小
self.titleLabel.font = [UIFont systemFontOfSize:12];
8.图片的内容模式
self.imageView.contentMode = UIViewContentModeC
二、添加子控制器
- (void)addChildViewController:
* 会将子控制器添加到childViewControllers,并且子控制器是有顺序的
* 目的就是持有子控制器,不让子控制器销毁,保证主控制器在,子控制器就在
三、让一个控制器拥有导航栏的最快方法:包装一层导航控制器
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];
四、UIBarButtonItem
1& 创建一个带有文字的item
[[UIBarButtonItem alloc] initWithTitle:@"设置" style:UIBarButtonItemStyleBordered target:nil action:nil]
2& 创建一个包装了自定义View的item
- (id)initWithCustomView:(UIView *)customView
五、设置导航栏UINavigationBar主题
// 1.appearance方法返回一个导航栏的外观对象
// 修改了这个外观对象,相当于修改了整个项目中的外观
UINavigationBar *bar = [UINavigationBar appearance];
// 2.设置导航栏的背景图片
[bar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
// 3.设置导航栏文字的主题
[bar setTitleTextAttributes:@{
UITextAttributeTextColor : [UIColor blackColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
六、设置导航按钮UIBarButtonItem主题
// 1.修改所有UIBarButtonItem的外观
UIBarButtonItem *barItem = [UIBarButtonItem appearance];
// 2.修改item的背景图片
[barItem setBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[barItem setBackgroundImage:image2 forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
// 3.修改item上面的文字样式
NSDictionary *dict = @{
UITextAttributeTextColor : [UIColor darkGrayColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
[barItem setTitleTextAttributes:dict forState:UIControlStateNormal];
[barItem setTitleTextAttributes:dict forState:UIControlStateHighlighted];
七、设置状态栏样式
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackO
10月29号整理
一、Cell的设置
1.设置cell的背景view和选中时的背景view
UIImageView *bg = [[UIImageView alloc] init];
bg.image = [UIImage imageNamed:@"abc.png"];
cell.backgroundView =
UIImageView *selectedBg = [[UIImageView alloc] init];
selectedBg.image = [UIImage imageNamed:@"cde.png"];
cell.selectedBackgroundView = selectedBg;
2.设置cell最右边的指示器(比如箭头\文本标签)
cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"common_icon_arrow.png"]];
二、tableView的设置
1.设置table头部和底部的view
// 底部(宽度固定是320)
tableView.tableFooterView =
// 头部(宽度固定是320)
tableView.tableHeaderView =
2.设置每一组头部和底部的高度
tableView.sectionHeaderHeight = 5;
tableView.sectionFooterHeight = 0;
3.设置tableView的背景
// 当tableview的样式为group时,如果想更换背景,必须清除默认条纹状的backgroundView
// backgroundView的优先级 & backgroundColor
tableView.backgroundView =
tableView.backgroundColor = [UIColor redColor];
10月30号整理
一、AFN的使用
1.依赖的框架
* MobileCoreServices.framework
* SystemConfiguration.framework
* Security.framework
2.主头文件:AFNetworking.h
3.创建POST请求对象
// BaseURL是基准路径,格式为-& 协议头://主机名 ,不能包含其他路径
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@""]];
// Method是请求方法
// path是拼接在基准路径后面的请求路径
// parameters是POST请求的参数
NSURLRequest *post = [client requestWithMethod:@"POST" path:@"oauth2/access_token" parameters:@{
@"client_id" : kAppKey,
@"client_secret" : kAppSecret,
@"grant_type" : @"authorization_code",
@"redirect_uri" : kRedirectURI,
@"code" : requestToken
4.发送请求,解析服务器的JSON数据
// 创建操作对象
NSOperation *op = [AFJSONRequestOperation JSONRequestOperationWithRequest:post
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
// AFN认为请求成功会调用
failure : ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
// AFN认为请求失败会调用
// 执行操作
[op start];
5.AFJSONRequestOperation默认不接收text/plain类型的数据,当服务器返回text/plain类型的数据时,会认为出错了。可以通过修改源代码解决问题
* 修改AFJSONRequestOperation的下列方法
+ (NSSet *)acceptableContentTypes {
return [NSSet setWithObjects:@"text/plain", @"application/json", @"text/json", @"text/javascript", nil];
二、MBProgressHUD的使用
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"哥正在加载中...";
hud.dimBackground = YES;
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];
三、工具类的作用
1.封装某一块独立的业务功能,比如存储数据、发送网络请求等
2.每个工具类的作用
* HttpTool:负责发送整个微博项目的get\post请求
* StatusTool:负责管理微博数据:抓取微博数据、发送微博
* AccountTool:负责管理账号(存储\读取账号)
一、SDWebImage的使用
1.依赖的框架
* ImageIO.framework
* MapKit.framework
2.UIImageView下载图片需要的头文件:UIImageView+WebCache.h
3.调用方法下载图片
// url是图片路径
// placeholder是占位图片(正在下载图片时,暂时显示的图片)
// options是缓存策略
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options
4.缓存策略-SDWebImageOptions
默认是开启了硬盘\内存缓存的
* SDWebImageRetryFailed
下载失败了会再次尝试下载
* SDWebImageLowPriority
当UIScrollView等正在滚动时,延迟下载图片(放置scrollView滚动卡)
* SDWebImageCacheMemoryOnly 只缓存到内存中,不缓存到硬盘上
* SDWebImageProgressiveDownload 图片会一点一点慢慢显示出来(就像浏览器显示网页上的图片一样)
* SDWebImageRefreshCached 将硬盘缓存交给系统自带的NSURLCache去处理,当同一个URL对应的图片经常更改时可以用这种策略
一般使用SDWebImageRetryFailed | SDWebImageLowPriority
二、动态改变Cell的高度
1.利用tableView代理方法的返回值决定每一行cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
三、UIFont
// 返回字体的行高
* [UIFont systemFontOfSize:10].lineHeight
一、每个Cell高度不一致的一般做法:
1.自定义一个cell,在initWithStyle:reuseIdentifier:构造方法中添加所有可能显示的子控件
2.新建一个模型类,比如StatusCellFrame,作用是:描述一个Cell内部所有子控件的frame属性
* 提供一系列CGRect类型的属性给Cell访问
* 提供一个接口来接收模型数据(比如Status)
* 在接收模型数据的同时,计算所有子控件的frame和cell的高度
3.回到控制器(代理和数据源)
1& 在tableView:heightForRowAtIndexPath:方法中利用StatusCellFrame返回cell的高度
2& 在tableView:cellForRowAtIndexPath:方法中
* 新建自定义cell
* 给Cell传递对应的StatusCellFrame对象
4. 自定义Cell
1& 提供接口接收StatusCellFrame对象
2& 在接收StatusCellFrame对象的同时,设置所有子控件的frame,设置所有子控件的数据
二、日期处理
1.将字符串转成NSDate
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *date = [fmt dateFromString:@" 17:45:34"];
2.将NSDate转为字符串
NSString *timeStr = [fmt stringFromDate:date];
一、自动伸缩属性
UIViewAutoresizingNone
UIViewAutoresizingFlexibleLeftMargin
跟父控件左边的距离自动伸缩
UIViewAutoresizingFlexibleRightMargin
跟父控件右边的距离自动伸缩
UIViewAutoresizingFlexibleTopMargin
跟父控件顶部的距离自动伸缩
UIViewAutoresizingFlexibleBottomMargin 跟父控件底部的距离自动伸缩
UIViewAutoresizingFlexibleWidth
宽度跟随父控件宽度自动伸缩
UIViewAutoresizingFlexibleHeight
高度跟随父控件高度自动伸缩
二、设置按钮(UIButton)文字和图片的间距
@property(nonatomic) UIEdgeInsets titleEdgeI
@property(nonatomic) UIEdgeInsets imageEdgeI
三、新浪数据分页传递的参数
* since_id : 会加载 微博ID & since_id 的数据(也就是时间比较晚、比较新的数据)
* max_id : 会加载 微博ID &= max_id 的数据(也就是时间比较早、比较旧的数据)
四、MJRefresh的使用
0.先加入主头文件
#import "MJRefresh.h"
1.添加下拉刷新
MJRefreshHeaderView *header = [MJRefreshHeaderView header];
header.scrollView = self.tableV
header.delegate =
2.添加上拉加载更多
MJRefreshFooterView *footer = [MJRefreshFooterView footer];
footer.scrollView = self.tableV
footer.delegate =
3.监听刷新状态,有2种方式
1& 设置代理delegate,一旦控件进入了刷新状态,就会调用delegate的下列方法
- (void)refreshViewBeginRefreshing:(MJRefreshBaseView *)refreshView
if ([refreshView isKindOfClass:[MJRefreshFooterView class]]) {
// 上拉加载更多
// 下拉刷新
2& 设置block回调
header.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {
footer.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {
4.通过代码进入刷新状态
[header beginRefreshing]; // 进入刷新状态就会触发相应的代理方法或者block
[footer beginRefreshing]; // 进入刷新状态就会触发相应的代理方法或者block
5.结束刷新状态,回到普通状态
[header endRefreshing];
[footer endRefreshing];
6.可以在MJRefreshBaseView.h中通过控制NeedAudio宏来开启音频功能
7.在MJRefreshFooterView.m和MJRefreshHeaderView.m中可以修改控件显示的文字
五、如果想在内部限制某个控件的宽高,不让外界随便改,可以重写setFrame:方法,在此方法内部设置自己的宽高
一、导航控制器的代理
1.UINavigationController的delegate属性
2.代理方法
1& 即将显示新控制器时调用
navigationController : 导航控制器
viewController : 即将显示的新控制器
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
2& 新控制器显示完毕时调用
navigationController : 导航控制器
viewController : 显示完毕的新控制器
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
二、隐藏控制器刚出现时的滚动条
重写控制器的viewDidAppear方法,覆盖父类默认的操作:显示滚动条
三、tableView每组的头部控件
1.控件宽度默认就是tableView的宽度
2.控件高度由下面的代理方法决定
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
四、通过tableView的代理方法控制某一行的cell能否达到高亮选中状态
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
dcj3sjt126com
浏览: 497656 次
来自: 北京
像你最后一句话:批注:至于为什么会有/assets/b729a ...
very helpful...
做网站刚好需要一个头像上传裁剪页面不知道要怎么做.太谢谢了~iOS开发知识体系 - 简书
下载简书移动应用
写了12029字,被149人关注,获得了299个喜欢
iOS开发知识体系
之前看过一篇博客,博主梳理一个iOS开发知识与能力体系的思维导图,。作者梳理得非常不错但是扩展得非常大。如果是对于初学者来说,看着会被吓跑。在这里我来尝试梳理一下对于iOS初学者的知识体系。
Mac mini、Mac book、iMac、黑苹果、OS X虚拟机都行,但真要好好搞iOS开发那就最好不要黑苹果和虚拟机,这样会直接影响你对iOS开发的兴趣。同样,如果你用的是一台MacBook,这样会大大增加你对iOS的开发兴趣(MacBook最好的程序员电脑)。PS:
到苹果开发者中心
并安装。目前可以直接从Xcode 6开始入手了。
到此为止你已经能够安静开发出一个跑在iOS模拟器上的“Hello world”
开发者账号
非必须,如果你想将自己的程序跑在iPhone上的话,它就必不可少了,当然,如果你不是独立应用开发者的话,一般你所在的企业应该都有,让Agent或者Admin邀请你加入就可以了。
对于任意一门新的技术来说,首先我认为学习其语言肯定是必须的也是首要的,对于iOS开发也不例外。就目前而言,Objective-C、C语言、Swift这三种语言都应该要有所了解,当然重点还是Objective-C。
Objective-C 重中之重,必修必精。
C语言 初学需了解,进阶必修。
Swift 未来之星,迟早要精。 /
iOS的SDK学习可能是初学者需要耗时最多的一个知识。因为其中有大量的库需要我们来学习掌握。其中最基本的几个为:
Foundation.framework
在你学习使用iOS的过程中,你会碰到大量的"NS"前缀的类库,这些类库基本上属于Foundation.framework,它是iOS开发的核心库,其中包括:常用数据结构(NSArray/NSDictionary/NSString 等)、网络(NSURL../NSHTTP..)、多线程(NSThread/NSNSOperation)等。
UIKit.framework
库使用"UI"为前缀的类库被包含在这个framework中,这些大部分是系统的UI层面的控件。如UIViewController、UIView、UIButton、UILabel等。使用这些控件才能构建出一个完整的APP。
QuartzCore.framework
iOS中绚丽而平滑的动画效果,是吸引人的一大利器,如果你想做出这样的效果,那你就得了解这个库了。iOS的核心动画的API都被包含在这个framework中,学会使用它才能让你的APP更加亮眼。
当然,iOS的SDK中还有很多的framework,它们各自负责着自己的一部分,对于初学者来说,能将以上几个framework的API了解清楚,就已经能做出一个完整的属于自己的APP了。
如何学习这些framework呢?
1.主动学习,最佳入口当然是最原始的。
在Xcode的导航栏张找到对应的framework展开Header就可以看到对应的各类的头文件,点击进去就可以看到各个类的公共方法,并且有比较详细的注释。
2.被动学习,在开发过程中或者学习过程中,看到某些方法,不知道其具体的意思和用法,则可以在Xcode中通过 ? + 鼠标单击当前方法就可以跳转到定义的头文件中去查看使用方法,或者通过
搜索查询。
网络这一块不仅仅指学会使用SDK中的网络API调用,而是指要去理解网络编程。你需要知道HTTP协议消息结构、GET/POST方法、常见的状态码的意思、Request/Response。你还需要知道与服务器通信使用的数据格式如:json、xml。
数据库你需要知道基本的SQL语句 select/update/insert/delete的操作;需要知道怎么连接表查询:外连接、内连接、自连接等;需要知道实体数据一对一、一对多、多对多关系如何设计数据库表。
iOS有着很浓厚的开源精神,在上有许多优秀的开源项目,在真正的开发过程中,某些著名的开源库大家也都广泛的使用着。如:
在开源社区还有着大量优秀的代码,我们不仅仅是可以直接使用这些代码从而提高我们的开发效率,而且还可以学习优秀的iOS开发者的代码风格以及实现思路。
最后的推荐
后续会继续针对某些点来写一些详细的介绍。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
简书程序员大本营
投稿须知:
1.本专题仅收录与程序有关的文章。
2.请在代码框里写代码,尽量保证可看性。
· 40175人关注
欢迎投稿 将实用的知识共享
· 16043人关注
分享 iOS 开发的知识,解决大家遇到的问题,讨论iOS开发的前沿,欢迎大家投稿~
· 8775人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:

我要回帖

更多关于 ios mjrefresh 使用 的文章

 

随机推荐