在前3节我们分别介绍了单机和伪分布的方式教程, 这一节开始讲述如何配置Hadoop集群, 如果没看过前3节的,建议可以先看看之前的配置,为了方便理解,本教程使用的两个节点:
第一个作为Master节点, 内网的IP地址:10.168.13.166
第二个作为Slave节点, 内网的IP地址:10.168.13.167
这个IP地址可以自行定义,常见的有192.168网段的IP地址, 只要2台主机可以互相Ping通即可;
more >>在前3节我们分别介绍了单机和伪分布的方式教程, 这一节开始讲述如何配置Hadoop集群, 如果没看过前3节的,建议可以先看看之前的配置,为了方便理解,本教程使用的两个节点:
第一个作为Master节点, 内网的IP地址:10.168.13.166
第二个作为Slave节点, 内网的IP地址:10.168.13.167
这个IP地址可以自行定义,常见的有192.168网段的IP地址, 只要2台主机可以互相Ping通即可;
more >>###一、简介
我们Hadoop早期的版本是JobTracker和TraskTracker,那么在2.0版本之后,使用新的MapReduce框架,加入(YARN—Yet Another Resource Negotiator), YARN是运行在MapReduce之上,负责资源的管理和任务调度,从MapReduce分离出来的YARN,提供了高可用性、高扩展性。
在上一节中我们通过伪分布式只是启动了MapReduce, 现在我们通过启动YARN,来看看YARN的配置吧。
more >>###一、环境介绍
使用Ubuntu16.04, Hadoop2.7版本, JDK使用1.7版本 (这里可以选择自己的Hadoop2.x版本,或者JDK 1.x版本)
本教程是在VMware Fusion上安装的Ubuntu16.04桌面版系统,
more >>上一节我们介绍了Hadoop的单机运行配置,这里我们继续采用单节点以伪分布式的方式来运行,Hadoop进程是以分离的Java进程来运行的,
节点即可以作为NameNode也可以作为DataNode, 同时,读取的是HDFS中的文件。
在升级使用Xcode7工具之后, 之前我们集成第三方的framework或者静态.a文件, 编译会报大量的警告, 具体如下:
warning: /var/folders/ .pcm: No such file or directory
在xcode5以后,一般在选择自动打包时, 经常会提示选择证书情况, 如果想要绕过选择证书,可以通过xcodebuild命令实现
在持续集成中:
本篇只说明一下如果使用命令行以及shell来打ipa包
###项目工程为*.xcodeproj
对于这种工程来说, 只需要在当前工程目录下,运行命令xcodebuild就可以了, 这时,xcodebuild命令运行之后,会在项目目录下新建一个build文件夹,在build/Release-iphoneos/xxx.app 这个目录下会生成一个与Target相同名的.app文件。
执行的命令:
1 |
|
接下来, 将xxx.app文件使用命令生成ipa包
执行的命令:
1 |
|
解释:
###项目工程为*.xcworkspace
对于像使用了CocoaPods工具之类的工程来说, 在第一步使用xcodebuild命令时,需要加几个参数,
执行的命令:
1 |
|
解释:
1 |
|
查看, 项目中都包括哪些target,选择合适的target(一般scheme后的名称与项目名相同)
最后生成的ipa包的命令与上述打.xcodeproj工程文件的命令相同
###关于使用shell脚本的编写
1.对于*.xcodeproj来说, 代码如下:
1 |
|
2.对于*.xcworkspace来说, 代码如下:
1 |
|
上述文件中都有备注说明这里就不在重复解释了, 如果你粘贴使用的话,记得修改最上面的worspace_path和project_name的为你自己的工程路径与工程名,另外
1 |
|
表示在打包前,先clean一下工程。
Swift语言是苹果公司在2014年WWDC上公开的新编程语言,Swift语言有可能就是用于替代Objective-C语言成为IOS的首选语言。
###Swift的特点
上一讲在AutoLayout教程 (一)中,我们简单介绍了一下AutoLayout的基本用法还有Size Classes的一些概念,
今天我们主要从代码的角度,来解说一下AutoLayout以及它里面的属性说明:
先看一段代码:
1 | NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:view1 |
通过下图的公式来看:
A表示我们要添加约束到那个视图上(对于上述代码A=view1), view1下面的NSLayoutAttributeTop表示
A的顶部约束相对于B视图(toItem: 相对于上述代码B=self.view)的NSLayoutAttributeTop属性(顶部),
距离是20px。m是一个等比例系数,constant表示常数。
我们如果使用代码来添加视图的约束,需要先给视图设置translatesAutoresizingMaskIntoConstraints为NO,
代码为:
1 | view1.translatesAutoresizingMaskIntoConstraints = NO; |
如果我们不添加这句话,AutoLayout是不会起作用的,而使用xib或者StoryBoard默认拖拽上去的视图,这个属性已经自动设置为NO
其他的属性添加方式,这里就不再一一介绍了,
如果我们使用代码同样的方式,创建一个UIView到superview上,需要创建4个NSLayoutConstraint,并且代码行数也很多,
正对这种情况,苹果还推荐使用VFL(Visual format Language)
解释说明一下:
关于上图format中需要用到的参数解释,如下图:
具体解释一下:比方说我们要创建一个视图为:(备注,下面的几个图是从其他博客里摘选的)
format参数为: H:|-[view]-|
第一个约束的format参数(横向)为:H:|-[view]-|
第二个约束的format参数(竖向)为:V:|-15-[view(==30)]
这里只列举一下format参数(横向)为:H:|-[view1]-[view2]-[view3(>=50)]-|
具体使用代码的方式,如下图:
说明:默认视图距离父视图的边距为20px, 视图与视图之间的间距是8px。 这里也特别说明一下上一节没提到一点,
如果我们选中了Spacing to nearest neighbor下面的 Constrain to margins 这个框,
就表示系统默认会给view1相对于superview的间距是16(如果我们的在上面的框中添加了左侧的约束是0的情况下),
如果不理解,请看下图,
###动态添加删除约束
如果我们要添加一个约束到superview上,可以通过
1 | [superview addConstraint: constraint]; |
或者添加一组约束的方式:
1 | [superview addConstraints: constraints]; |
如果要删除一个约束,可以通过
removeConstraint方法
最后记得在更改约束的地方调用setNeedsUpdateConstraints即可。
备注说明一点:
layoutIfNeed和setNeedsLayout方法的区别:
其实这2个方法,比较类似于我们之前接触过UIView的重绘调用的
displayIfNeed 和 setNeedsDisplay
其中,setNeedsLayout表示立即执行, 而layoutIfNeed表示等UIKit空闲的时候才会执行。
###AutoLayout的动画
动画一般有2种方式来实现:
通常我们使用第二种偏多一些,一般在xib中,将对应的约束声明一个IBOutlet NSLayoutConstraint,然后在需要添加动画的地方,修改
constant值,代码如下:
1 | [UIView animateWithDuration:0.3f animations:^{ |
注意:使用NSLayoutConstraint的方式,与frame的方式做动画不同的地方,是需要调用layoutIfNeeded,否则这个动画不会生效,而是直接会设置commentViewHeightLayoutConstraint的constant值为300。
###IOS6与IOS7,8的兼容问题
尽管现在ios6在市场占的份额越来越低了,基本新软件的最低适配都是ios7开始的,但是有一些公司还是要兼容IOS6版本。
对于AutoLayout之前,我们的做法
动态这个deltas值即可, 如果使用AutoLayout则不在有这种偏移量了,那么如何适配ios6,ios7关于屏幕状态的20px呢?
我这里推荐2种做法,仅供大家参考:
如下图:
不过第二种方式的缺点就是只能在StoryBoard中创建视图了, 在Xib中由于没有Top Layout Guide,
当然我的其他同事,还有对于这种UIViewController的view布局,都是使用代码方式实现,对于像里面使用自定义的UITableViewCell则使用Xib方式。
总之,大家找到一个适合的方式就可以了,不必纠结于此!
接下来,我们将介绍一些AutoLayout的对于UIScrollView,UITableViewCell动态高度等一些相对高级的用法,尽情期待吧!
在iphone6, iphone6 plus出现之前,iphone设备的宽度是320,高度稍有不同, 一般我们简单的做法是使用AutoResizing
自动拉伸高度即可:
如图:
1 | • UIViewAutoresizingNone view的frame不会随superview的改变而改变 |
由于AutoResizing很难能做视图与视图之间的间距,比如下图:
我们想约束左侧红色View与右侧橘黄色View保持一个固定像素(比方说是10px,RedView与OrangeView随屏幕的宽度不同而不同),
这样使用使用AutoResizing显然就不合适了。
接下来我们开始正式进入AutoLayout:
首先,打开我们的Main.stroyboard文件, 先介绍一下常用的视图窗:
在右下角的位置,
第一个icon按钮,打开后的功能描述
第二个icon按钮,打开后的功能描述
第三个icon按钮是用于刷新我们的视图,第4个icon我们暂时用不到,所以这里就不在切图描述了
##AutoLayout的基本使用
1、拖拽一个UIView到ViewController的视图中, 如下样式: (要求,这个view居顶部10px,居左20px,宽度200px,高度100px)
添加约束的方式:
上边方格内,红色“I”选中表示添加了这个约束,中间的width和height前面的方格打钩表示添加了宽度和高度的约束;
最后点击底部的“Add 4 Constraints”按钮, 点击之后的效果,如下图:
备注: Update Frames 选择“Items of New Constraints” 表示新添加的约束,会自动刷新当前屏幕上view显示的样式和位置;
添加之后的样式,如下图:
出现了蓝色的边线表示那条约束显示是正确的, 如果,我们只添加了约束,没有设置Update Frames的选项,显示如下图:
图中虚线表示的是添加完约束后,应该显示样子(只是样子还没有在屏幕上刷新而已!),刷新的方式,可以点击(右下角的第三个图标)
或者是快捷键,刷新样式即可!
并且点击右侧菜单栏(尺子的icon)
可以看到对应的约束。
如果我们添加的约束不正确,则会出现以下状况(例如,我把刚刚View的宽度约束删除后),如下图:
当然,点击这个这个红色箭头,里面会告诉你缺失的约束是什么, 或者建议是什么。
如果我们重复添加约束,或者约束过度,这里也会提示为黄色的警告约束。
如果我们想设置一个宽度与屏幕宽度成一定比例的UIView(比方说这个view的宽度是屏幕的一半),并且高度与宽度也是一个等比例的关系(比方说宽高比是2:1)时,
第一步:先添加以下约束(同时选中这个view与superview):如下图:
第二步:修改宽度的比例:
设置宽度的比例为0.5,(如果我们设置宽度比一半多,还可以修改上边的constant常数即可);
这里FisrtItem是superview,SecondItem是我们的View, 那么Multiplier参数自然是2,表示superview是view的2倍
关于FistItem与SecondItem会在讲解代码部分详细提到。
同理我们修改Ratio为2:1即可
此时,我们只给这个view添加了width和height的约束,还缺少x,y的坐标约束,比方设置这个view,与superview居中显示,那么添加
约束,如:
如果我们的视图是居中偏左,或者偏右(或者偏上、偏下),都可以修改绿色框内,添加偏移量即可!
以上是关于UIView添加约束的实现, 同理,自己可以拖拽一个UILabel、UIButton添加约束试试
(这里需要说明的一点,由于UILabel、UIButton可以根据title来自适应宽度、高度,也就是内置的contentsize)所以只需要添加UILabel、UIButton的x,y坐标即可!
##Size Classes的简介
早期我们创建一个项目选择Devices为Universal时, 默认项目中会有一个“_iphone.xib”, “_ipad.xib”(后期加入storyboard后,是建2个storyboard)
随着iphone6,iphone6 plus 以及Apple watch的出现, 苹果也是为了将这些视图统一起来,于是ios8中加入Size Classes的概念,
Size Classes就是对设备尺寸的一个抽象概念, 现在的通常的设备都可以简单看成为: 普通(Regular)、 紧密(Compact)和任意(Any),
于是这样就会出现 3*3的一个矩阵形式(一共是9种模式),如下图:
现在默认新建的项目都已经开启了Size Classes和AutoLayout功能了,默认我们创建的是在w:Any h:Any
点击红色区域,就会弹出一个9宫格,鼠标在9宫格里移动,会看到不同的宽度和高度的选择,也就是(Regular、Compact、Any)
例如,你要适配所有iphone的设备,可以选中,
由于ipad模式下,宽度和高度都是Regular模式,所以,选择宽高都是Regular或者Any都行。
Any表示所有设备下都会install到, 比如,我们选择了iphone模式下开发(即W:Compact,H:Regular),此时又想添加其他的模式也能显示此视图,只需要在下图点击左侧的加号,添加W:H:的模式,并选中installed。
关于AutoLayout的代码介绍和高级用法,我将在之后推出!
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true