1.图像获取

我们继续开发,这次我们首先要做的是左下角的按钮:start
over如果你准备放弃你所有的分数与局数或者更换游戏玩家,你可以选择重新开始游戏,这就需要我们在代码中添加新的方法:

个人喜欢用纯代码写东西,其中用到最多的就是Masonry,我整理一些使用过程中一些点,方便以后使用.(基本的语法就不说了)

SDWebImage– SDWebImage网络图片获取及缓存处理。

func startNewGame(){ score = 0 round = 0 startNewRound()}
  1. 我一般将数值类型的约束用mas_equalTo,而相对于某个控件,或者某个控件的某个约束,我会使用equalTo,如:make.size.mas_equalTo(CGSizeMake);``make.center.equalTo(weakSelf.view);
  2. setNeedsLayout:告知页面需要更新,但是不会立刻开始更新。执行后会立刻调用layoutSubviews。layoutIfNeeded:告知页面布局立刻更新。所以一般都会和setNeedsLayout一起使用。如果希望立刻生成新的frame需要调用此方法,利用这点一般布局动画可以在更新布局后直接使用这个方法让动画生效。layoutSubviews:系统重写布局setNeedsUpdateConstraints:告知需要更新约束,但是不会立刻开始updateConstraintsIfNeeded:告知立刻更新约束updateConstraints:系统更新约束
  3. - updateViewConstraints
    ViewController的View在更新视图布局时,会先调用ViewController的updateViewConstraints
    方法。我们可以通过重写这个方法去更新当前View的内部布局,而不用再继承这个View去重写-updateConstraints方法。我们在重写这个方法时,务必要调用
    super 或者 调用当前View的 -updateConstraints 方法。

Kingfisher–纯Swift实现的类SDWebImage库,实现了异步下载和缓存图片。

这个方法的作用就是讲数据清零。接下来我们需要一个方法,用前文描述过的方法将start
over控件与方法绑定.

KFSwiftImageLoader– Swift,一个图像缓存加载库。

@IBAction func startOver(){ startNewGame() updateLabel()}
 // 防止block中的循环引用__weak typeof weakSelf = self;UIView* view = [UIView new];view.backgroundColor = [UIColor brownColor];[self.view addSubview:view];//使用mas_makeConstraints添加约束[view mas_makeConstraints:^(MASConstraintMaker *make) { // 添加大小约束(make就是要添加约束的控件view) make.size.mas_equalTo(CGSizeMake); // 添加居中约束(居中方式与self相同) make.center.equalTo(weakSelf.view);}];

 UIView* blackView = [UIView new];blackView.backgroundColor = [UIColor blackColor];[self.view addSubview:blackView];[blackView mas_makeConstraints:^(MASConstraintMaker *make) { //添加约束大小 make.size.mas_equalTo(CGSizeMake); //在 左,上 添加约束 (左、上约束都是20) make.left.and.top.mas_equalTo;}];UIView* grayView = [UIView new];grayView.backgroundColor = [UIColor lightGrayColor];[self.view addSubview:grayView];[grayView mas_makeConstraints:^(MASConstraintMaker *make) { // 大小、上边距约束与黑色view相同 make.size.and.top.equalTo(blackView); // 添加右边距约束(这里的间距是有方向性的,左、上边距约束为正数,右、下边距约束为负数) make.right.mas_equalTo;}];

- dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self];}- viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. __weak typeof weakSelf = self; _textField = [UITextField new]; _textField.backgroundColor = [UIColor redColor]; [self.view addSubview:_textField]; [_textField mas_makeConstraints:^(MASConstraintMaker *make) { //left,right,centerx,y 不能共存只能有其二 make.left.mas_equalTo; // make.right.mas_equalTo; make.centerX.equalTo(weakSelf.view); make.height.mas_equalTo; make.bottom.mas_equalTo; }]; // 注册键盘通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrameNotification:) name:UIKeyboardWillChangeFrameNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];}- keyboardWillChangeFrameNotification:(NSNotification *)notification { // 获取键盘基本信息(动画时长与键盘高度) NSDictionary *userInfo = [notification userInfo]; CGRect rect = [userInfo[UIKeyboardFrameBeginUserInfoKey] CGRectValue]; CGFloat keyboardHeight = CGRectGetHeight; CGFloat keyboardDuration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; // 修改下边距约束 [_textField mas_updateConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo(-keyboardHeight); }]; // 更新约束 [UIView animateWithDuration:keyboardDuration animations:^{ [self.view layoutIfNeeded]; }];}- keyboardWillHideNotification:(NSNotification *)notification { // 获得键盘动画时长 NSDictionary *userInfo = [notification userInfo]; CGFloat keyboardDuration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]; // 修改为以前的约束 [_textField mas_updateConstraints:^(MASConstraintMaker *make) { make.bottom.mas_equalTo; }]; // 更新约束 [UIView animateWithDuration:keyboardDuration animations:^{ [self.view layoutIfNeeded]; }];}- touchesBegan:touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; [self.view endEditing:YES];}

FastImageCache–
FastImageCache网络图片获取及缓存处理,iOS图片加载速度极限优化—FastImageCache解析。

在startOver方法中调用开启新游戏与更新数据的方法,注意在编写startover方法是要确保在方法的左边有一个小圆圈,鼠标点击它可以看见空间与代码的关联关系。还有一个需要更改的地方,将初始化viewDidView方法中的startNewRound替换为startNewGame即可。

array 的 mas_distributeViewsAlongAxis withFixedSpacing 变化的是控件
长度或宽度

EGOCache–十分知名的第三方缓存类库,可以缓存NSString、UIImage、NSImage以及NSData。除此,如果还可以缓存任何一个实现了接口的对象。所有缓存的数据都可以自定义过期的时间,默认是1天。EGOCache支持多线程(thread-safe)

下面我们要学习一点全新的知识了,我们现在了解一下这个功能的需求,还记得页面右下角那个圆圈的小图标么,它是用来展示一些说明或者帮助信息的,我们点击about图标,会弹出一个全新的页面展示一些关于游戏的说明与信息。

定义一个存放三个控件的数组NSArray *array;``array = @[greenView,redView,blueView];

2.网络聊天

首先我们需要来创建一个全新的文件,点击上方工具栏–File–File…弹出如下窗口:

注意:

数组里面的元素不能小于2个,要不会报错
views to distribute need to bigger than one

直接调用下面的方法:- getHorizontalone{//方法一,array 的
mas_distributeViewsAlongAxis/***
多个控件固定间隔的等间隔排列,变化的是控件的长度或者宽度值** @param
axisType 轴线方向* @param fixedSpacing 间隔大小* @param leadSpacing
头部间隔* @param tailSpacing 尾部间隔*/// MASAxisTypeHorizontal 水平//
MASAxisTypeVertical 垂直

[arrayList mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:20 leadSpacing:5 tailSpacing:5];[arrayList mas_makeConstraints:^(MASConstraintMaker *make) { make.top.mas_equalTo; make.height.mas_equalTo;}];

}

array de mas_distributeViewsAlongAxis withFixedItemLength
控件size不变,变化的是间隙- getVertical{/***
多个固定大小的控件的等间隔排列,变化的是间隔的空隙** @param axisType
轴线方向* @param fixedItemLength 每个控件的固定长度或者宽度值* @param
leadSpacing 头部间隔* @param tailSpacing 尾部间隔*/[arrayList
mas_distributeViewsAlongAxis:MASAxisTypeVerticalwithFixedItemLength:60leadSpacing:40tailSpacing:10];[arrayList
mas_makeConstraints:^(MASConstraintMaker *make) {//
make.top.mas_equalTo;//
make.height.mas_equalTo;make.left.mas_equalTo;make.right.mas_equalTo;}];}

XMPPFramework– XMPPFramework

图片 1

以上俩方法都在NSArray+MASAdditions

<br />

 for (NSUInteger i = 0; i < 4; i++) { UIView *itemView = [self getItemViewWithIndex:i]; [_containerView addSubview:itemView]; [itemView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.and.height.equalTo(@(ITEM_SIZE)); make.centerY.equalTo(_containerView.mas_centerY); make.centerX.equalTo(_containerView.mas_right).multipliedBy(i + 1) / ITEM_COUNT + 1)); }];}

 UIView *lastSpaceView = [UIView new];lastSpaceView.backgroundColor = [UIColor greenColor];[_containerView1 addSubview:lastSpaceView];[lastSpaceView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.and.top.and.bottom.equalTo(_containerView1);}];for (NSUInteger i = 0; i < ITEM_COUNT; i++) { UIView *itemView = [self getItemViewWithIndex:i]; [_containerView1 addSubview:itemView]; [itemView mas_makeConstraints:^(MASConstraintMaker *make) { make.height.and.width.equalTo(@(ITEM_SIZE)); make.left.equalTo(lastSpaceView.mas_right); make.centerY.equalTo(_containerView1.mas_centerY); }]; UIView *spaceView = [UIView new]; spaceView.backgroundColor = [UIColor greenColor]; [_containerView1 addSubview:spaceView]; [spaceView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(itemView.mas_right).with.priorityHigh(); // 降低优先级,防止宽度不够出现约束冲突 make.top.and.bottom.equalTo(_containerView1); make.width.equalTo(lastSpaceView.mas_width); }]; lastSpaceView = spaceView;}[lastSpaceView mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(_containerView1.mas_right);}];

和面方法4一样,利用spaceView来实现

 UIView* bgView = [[UIView alloc]init];bgView.backgroundColor = [UIColor yellowColor];[self.view addSubview:bgView];[bgView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.and.right.mas_equalTo; make.top.mas_equalTo; make.height.mas_equalTo;}];listText = @[@"北京",@"地大吴波啊",@"你大爷",@"我们的爱哎哎"];UIView *lastSpaceView = nil;for(int i = 0 ; i < listText.count; i ++){ UILabel* label = [UILabel new]; label.text = listText[i]; label.backgroundColor = RANDOMCOLOR; [bgView addSubview:label]; UIView* lineView = [UIView new]; lineView.backgroundColor = [UIColor redColor]; [bgView addSubview:lineView]; [label mas_makeConstraints:^(MASConstraintMaker *make) { make.top.bottom.mas_equalTo; if (lastSpaceView) { NSLog(@"存在 lastView"); make.left.equalTo(lastSpaceView.mas_right).mas_offset; }else { NSLog(@"不存在存在 lastView"); make.left.equalTo(bgView.mas_left); } make.height.equalTo; }]; lastSpaceView = label; [lineView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.and.bottom.mas_equalTo; make.width.mas_equalTo; make.left.mas_equalTo(label.mas_right).mas_offset; }];}

openfire聊天。

我们选择Cocoa Touch
class,点击next依次输入名称:aboutViewController父类:UIViewController不需要创建XIB文件语言选择swift点击下一步,选择保存的路径,点击创建。

效果图:

图片 2

 UIView* bgView = [UIView new];bgView.backgroundColor = [UIColor purpleColor];[self.view addSubview:bgView];UILabel* titleLab = [UILabel new];titleLab.backgroundColor = [UIColor redColor];titleLab.textAlignment = NSTextAlignmentCenter;titleLab.font = [UIFont systemFontOfSize:15.f];titleLab.text = @"曹操——《短歌行》";[bgView addSubview:titleLab];UILabel* contentLab = [UILabel new];contentLab.numberOfLines = 0 ;contentLab.textAlignment = NSTextAlignmentCenter;contentLab.backgroundColor = [UIColor brownColor];contentLab.font = [UIFont systemFontOfSize:13.f];contentLab.text = @" 对酒当歌,人生几何? 譬如朝露,去日苦多。\n 慨当以慷,忧思难忘。 何以解忧?唯有杜康。\n 青青子衿,悠悠我心。 但为君故,沉吟至今。\n 呦呦鹿鸣,食野之苹。 我有嘉宾,鼓瑟吹笙。\n 明明如月,何时可掇? 忧从中来,不可断绝。\n 越陌度阡,枉用相存。 契阔谈宴,心念旧恩。\n 月明星稀,乌鹊南飞。 绕树三匝,何枝可依?\n 山不厌高,海不厌深。 周公吐哺,天下归心。";[bgView addSubview:contentLab];//思路: 父视图的上间距等于title的上间距,父视图的下间距等于content的下间距__weak typeof weakSelf = self;[bgView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.mas_offset; make.right.mas_offset; make.centerY.equalTo(weakSelf.view);}];[titleLab mas_makeConstraints:^(MASConstraintMaker *make) { make.left.top.right.mas_equalTo;}];[contentLab mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.mas_equalTo; make.top.equalTo(titleLab.mas_bottom).mas_offset; make.bottom.equalTo;}]; 

图片 3

环信–给开发者更稳定IM云功能。8200万用户考验,好用!(暂无及时语音、视频通话)

可以看见这个swift文件已经出现在左侧的项目导航栏中了,这个一个全新的viewController文件,要设计viewController,我们就要去interfaceBuilder界面。

以后慢慢更新,记录方便以后使用

<br />文/栋飞

//一些扒的别人的记录

//width >= 200 && width <= 400 make.width.greaterThanOrEqualTo; make.width.lessThanOrEqualTo

.priority允许你指定一个精确的优先级,数值越大优先级越高.最高1000..priorityHigh等价于
UILayoutPriorityDefaultHigh .优先级值为
750..priorityMedium介于高优先级和低优先级之间,优先级值在
250~750之间..priorityLow等价于 UILayoutPriorityDefaultLow ,
优先级值为 250.

make.left.greaterThanOrEqualTo(label.mas_left).with.priorityLow();``make.top.equalTo(label.mas_top).with.priority;

//使 centerX和 centerY = button1make.center.equalTo

//使 centerX = superview.centerX – 5, centerY =
superview.centerY + 10 make.center.equalTo(superview).centerOffset(CGPointMake

make.width.equalTo(superview).multipliedBy;

融云–即时通讯云服务提供商。(暂无及时语音、视频通话)

打开Main.storyboard文件,这里还没有一个新的界面,所以我们还是需要自己添加。从界面右下角的对象库中,选择ViewController,直接将它拖到界面中

容联云通讯–提供基于互联网通话,视频会议,呼叫中心/IVR,IM等通讯服务。

图片 4

3.网络测试

这个viewController完全是空的并且是竖直方向的,选中这个新的viewController,前往属性导航栏,在Simulated
Metrics下方, 将Orientation属性致为landspace。

Reachability–苹果提供过一个Reachability类,用于检测网络状态。但是该类由于年代久远,并不支持ARC。该项目旨在提供一个苹果的Reachability类的替代品,支持ARC和block的使用方式。iOS网络监测如何区分2、3、4G

我们在这个新的界面上放上一个button,更能使关闭这个界面。拖拽一个TextView用于展示一些说明信息,双击它可以修改textview的文本信息(在这里我们还看到一种名为textField的空间,他们的区别是TextField仅仅只可以展示一行的信息),不过这个界面我们是不希望用户可以自己更改的,这需要我们去设置一个它的属性Editable,你可以在这个控件的属性导航栏中找到Behavior,在其中勾选:

SimpleCarrie–简单的运营商信息获取!。

图片 5

4.WebView

现在的界面差不多看起来是这个样子的:

发表评论

电子邮件地址不会被公开。 必填项已用*标注