AJ分享,必须精品 一:场景 我们有个对象人,他有两个方法,一个是学习study,一个是跑步run, 这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这个对象作为下一次调用的快捷方式,代码如下: 调用: int main(int argc, const char * argv[]) { @autoreleasepool { //初始化人 Person *p = [[Person alloc] init]; //调用 [[p study] run];…
UIAlertView是iOS开发过程中最常用的控件之一,是提醒用户做出选择最主要的工具.在iOS8及后来的系统中,苹果更推荐使用UIAlertController来代替UIAlertView.所以本文也并不提倡开发者再使用UIAlertView,本文的目的是探讨如何将原来的给变量赋值和通过Delete来回调的方式变成链式编程风格和通过Block来回调.通过学习对UIAlertView的改造让各位iOS开发者能够学会这种更加便捷的开发方式   什么是链式编程 对于有一定开发经验的开发者来说,链式…
objc利用block实现链式编程方法 因为不好读.block和其他语言的匿名函数一样,很多程序员刚开始很难主动去用他. 本文描述block作为属性的实际使用,看懂block,并讲解如何利用block实现链式编程方法.   [更新]LinkBlock支持多对象链式编程     写法简单粗暴提升效率 //[New]支持多对象链式编程 //1.如果使用多个对象的链式编程,需要取值的时候请调用ends()获取多个结果 //2.如果调用end()只会取得第一个对象的链条返回值 //3.使用endsAt(…
一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式,初次写起来比较别扭,但是一旦习惯了,用起来比较得心应手.那么,如何写呢?其实就是一个对象调用它的实例方法后返回一个block(已经定义过),而这个block内部又返回该对象.依此类推,该对象不论调用多少个它的实例方法,最终都会返回该对象本身. 三.实例 LearnManager类定义和实现 // /…
谈到链式编程,那Masonry几乎就是最经典的代表.如: make.top.equalTo(self.view).offset() 像这样top.equalTo(self.view).offset(60)通过”点”语法,将需要执行的代码块连续的书写下去,就是链式编程.它能使代码简单易读,书写方便 1.传统写法,两个方法需要单独调用,也不能任意组合顺序 创建Person类 Person.h: - (void)eat1; - (void)sleep1; Person.m: - (void)eat1…
链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好.例如 a(1).b(2).c(3). 链式编程思想最为关键的是,方法的返回值是block,block必须返回对象本身(返回block时,block所在的方法调用者对象)block的参数是需要操作的值.: 在iOS开发中,使用链式编程思想最好的代表是 Masonry 自动约束布局: 例如: [itemButton mas_makeConstraints:^(MASConstraintMaker *make)…
看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练. 我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出! 直接看代码吧!关键的注释都有. 我自己运行过,可以正常运行!(控制台代码) #import <Foundation/Foundation.h> @class CalculatorMaker; typedef CalculatorMaker *(^ReturnBlock)(int); // Class - CalculatorMak…
1.Masonry的语法为啥能连续的使用点语法? >> 底层使用的是:用block当函数的返回参数  > 链式编程思想 2. 使用block当函数的返回参数 // 之前开发中比较习惯,把事情封装到一个方法中, // 链式编程思想:把要做的事情封装到block,给外界提供一个返回这个Block的方法 // 链式编程思想方法特点:方法返回值必须是block,block参数:放需要操作的内容,block返回值:方法调用者 - (void)viewDidLoad { [super viewDid…
一直都觉得使用Masonry的时候语法特别优雅,很早的时候就想尝试下怎么实现, 一直都没弄明白,直到最近看见一篇叫block实现链式编程的 1.方法的返回类型是代码块 >代码块的返回类型是该类的实例变量 >在返回的代码块中,设置完相关的操作,并把实例对象返回 使用实例: UIButton * btn = [UIButton button].normalTitle(@"普通状态").normalImage([UIImage imageNamed:@"icon_hel…
有些时候需要不断地调用方法,如果使用传统方案,需要拿到对象多次调用,例如有一个Ball对象,实现了up.down.left.right四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写: [ball right]; [ball down]; 如果能够按照下面这样写,会更加方便. [[ball right] down]; 要实现这样的功能十分简单,只要每个方法都返回self即可,但是如果调用次数多,会有很多个中括号.如果能改造成后面这样,会更好. ball.right().down…
看这篇博客时最快让你上手ReactiveCocoa之基础篇看到作者介绍链式编程那一块,发现自己的钻研精神不足.想想自己使用链式编程也有段时间了,对,就是 Masonry 库.自己一直享受点语法带来的效率提升,却没想过自己去照着实现一下,真是惭愧. 好吧,本着发现问题就要立即解决问题的一贯原则,就看一看链式语法的实现方法. 现在做一个加减乘除计算. 在 Masonry 里,我们常用的添加约束的方法就是 mas_makeConstraints: // View+MASAdditions - (NSA…
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.使用css操作…
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http://www.cnblogs.com/lvonve/ CSDN:https://blog.csdn.net/lvonve/ 在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目.现在就让我们一起进入 Web 前端学习的冒险之旅吧! 一.事件冒泡与阻止…
背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应.深度注入等问题,笔者从Masonry得到启示,开发了一个通过链式配置注入器实现深度注入.类型转换.key-属性名映射等功能的轻量级注入框架SuperKVC.眼下已经开源到GitHub,点击这里前往.欢迎Star和Fork.欢迎和我一起完好这个框架! 本文将从应用和原理两个角度介绍SuperKVC…
AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封装代码,并且系统的UINavigationController不能满足我们的需求了,所以得自定义. 首先,我们在NYTabBarViewController的 - (void)addChildVc:(UIViewController )childVc title:(NSString )title i…
AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中,这个调度…
AJ分享,必须精品 先看效果图 代码 ViewController #import "NYViewController.h" #import "NYCarGroup.h" #import "NYCar.h" @interface NYViewController () <UITableViewDataSource> @property (nonatomic, strong) UITableView *tableView; @prope…
AJ分享,必须精品 合并图片(图片水印)第一种方法 效果 实现: 思路: 1.分别下载2张图片:大图片.LOGO 2.合并2张图片 3.显示到一个imageView身上 // 异步下载 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 1.下载第1张 NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/…
AJ分享,必须精品 先看效果图 代码 // ViewController.m // 打砖块 // // Created by liufan on 13-8-17. // Copyright (c) 2013年 itcast. All rights reserved. // @interface ViewController : UIViewController // 砖块图像数组 @property (strong, nonatomic) IBOutletCollection(UIImageVi…
Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (Person *(^)())study; - (Person *(^)())run; @end Person.m #import "Person.h" @implementation Person - (Person *(^)())study { return ^{ NSLog(@"study"); ret…
AJ分享,必须精品 效果: 代码: 很简单,不多说,就是把一堆动画放一起,看代码. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 平移动画 CABasicAnimation *a1 = [CABasicAnimation animation]; a1.keyPath = @"transform.translation.y"; a1.toValue = @(100); // 缩放动画 CABas…
AJ分享,必须精品 一:简单介绍 这是新浪微博的iOS端项目,来自于黑马的一个实战项目. 主要分成五大模块,本次全部运用纯代码实现,其中会用到很多前面学过得内容,如果有的地方有重复的知识点,说明这个知识点真的很重要,没有时间看视频学习或者培训的朋友们,可以看AJ的这一系列博客,AJ会竭尽所能的完善他. 有什么不全面的地方,欢迎大家回复我,AJ会尽快改正的. 二:建立项目导入素材 第一步首先我们要建立我们的项目了,在这儿我并没有用最新版的xcode6,而是用的xcode5.1,为什么用的5.1而不…
AJ分享,必须精品 一:为什么要学习网络编程 关于这个问题,为什么要学习网络编程,AJ的理解就是,这东西是时代发展的必要,没什么为什么,就是应该学,除非你就是想玩单机,但是就算是单机也会有购买金币之类的网络需求,简单来说,有了网络,让你不再是一个人在战斗. 网络编程是一种实时更新应用数据的常用手段 . 网络编程是开发优秀网络应用的前提和基础. 总之,网络编程十分重要,必须学,必须学好. 二:初识网络 1:要记住的基本概念 在网络编程中,有几个必须掌握的基本概念 客户端(Client):移动应用(…
AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"apps.plist" ofType:nil]]; NSMutableArray *appArray = [NSMutableArray array]; for (NSDictionary *di…
AJ分享,必须精品 一:NSThread的基本使用 1:创建和启动线程 一个NSThread对象就代表一条线程 创建.启动线程 NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(sel) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程…
AJ分享 必须精品  效果图 曾经风靡一时的tom猫其实制作起来那是叫一个相当的easy啊 功能全部实现,(关键是素材,没有素材的可以加我微信) 新手也可以很快的完成tom这个很拉轰的ios应用哦 然后呢你需要准备这些素材... 拖拽控件吧,因为这一个项目用到的不是很多,用代码写太累了,得不偿失,大家有兴趣的可以自己谢谢纯代码做ui的练习哦不会的可以参考我的前面一篇 拖拽控件,那些东西呢 看图片吧 就是这些东西,那个名字的地方在代码中又妙用 另外UIButton的tag属性也被添加了奇妙的数字…
不多说,AJ分享,必须精品 这两个一个是HelloWorld(左边) 另一个是 加法计算器(右边)的截图. 先运行第一个 程序看看效果 1.打开Xcode(没有哦mac系统的没有xcode的帮你们默哀下) 2.选择项目模板: Single View Application是最适合初学者的模板 3.设置项目属性和存放位置 4.运行程序 先运⾏行第⼀一个iOS程序看看效果先(⽤用快捷键Command + R 也⾏行) 5.运行结果就可以在模拟器上看到了,空白的一片.... HelloWorld程序只…
AJ分享,必须精品 上一篇文章写了怎么生成二维码,这儿就说说怎么读取吧,反正也很简单,iOS封装的太强大了 步骤呢就是这样: 读取二维码需要导入AVFoundation框架#import <AVFoundation/AVFoundation.h> 1:利用摄像头识别二维码中的内容(模拟器不行). 2:输入(摄像头). 3:由会话将摄像头采集到的二维码图像转换成字符串数据. 4:输出(数据). 5:由预览图层显示扫描场景. #import "ViewController.h"…
AJ分享,必须精品 二维码是一项项目中可能会用到的,iOS打开相机索取二维码的速度可不是Android能比的...(Android扫描二维码要来回来回晃...) 简单不多说,如何把一段资料(网址呀,字符串)变成二维码,直接上代码 步骤: 导入CoreImage框架 #import <CoreImage/CoreImage.h> 通过滤镜CIFilter生成二维码 #import "ViewController.h" #import <CoreImage/CoreIma…
AJ分享,必须精品 一:效果 重力和碰撞 吸附现象 二:简介 什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟和仿真现实生活中的物理现象 重力.弹性碰撞等现象 物理引擎的价值 广泛用于游戏开发,经典成功案例是“愤怒的小鸟” 让开发人员可以在远离物理学公式的情况下,实现炫酷的物理仿真效果 提高了游戏开发效率,产生更多优秀好玩的物理仿真游戏 知名的2D物理引擎 Box2d Chipmunk 三:使用步骤和代码 步骤…