流水布局与block深入研究

9.  自定义流水布局

9.0UICollectionView与UItableView的区别:在布局(UItableView继承UISorllView),UICollectionView不用设置contentSize
           9.0UICollectionView与UItableView的相同点:循环利用
   
           9.1.0UICollectionView注意点:1.初始化必须要传入布局,(流水布局:九宫格布局)2.UICollectionViewCell必须注册3.必须自定义cell
           9.1.1创建流水布局:尺寸itemSize(item相当与cell),滚动方向scrollD,额外滚动区域sectionI,行间距mini这是设置流水布局内部的
           9.1.2创建UICollectionView,设置尺寸,加载NIB设置背景颜色,自定义cell给cell添加一个UIImage属性

9.2自定义UICollectionView的布局,了解5个方法
            
                1.-(void)prepareLayout(作用:计算所有的cell布局,条件:cell布局固定,调用时刻:一开始布局时与UICollectionView刷新的时候会调用)
                2.-(nullable NSA<__kindof):(CGRect)rect(作用:返回每个cell布局,允许一次性返回所有的cell布局)
                3.-(BOOL)shouldI:()newBounds(是否允许在拖动的时候新布局)
                4.-(CGPoint)target offset:(CGPoint)velocity(作用返回最终的偏移量,调用时刻:手指离开时)
       5.-(CGSize)collectionView(作用:设置collectionV滚动范围)
            9.2.1可以给居中的图片方大
                1.在第2中方法设置距离中心越近越大尺寸
                2.在第4种方法设置那张照片离中心越近就自动把那张照片放在中心.
 10.block深入研究

10.0关于代理,modal要传值给vc,要拿到vc对象,让vc成为modal的代理,后根据代理方法传值
            10.1block的基本使用:保存一段代码,并不是马上执行,需要手动调用  inLineBlock快速生成block代码
            10.2block4种使用方式: 通过block();调用
                   1.block声明:返回值(^Block变量名)(block参数类型),参数变量名可以省略
                   void(^block2)()或void(^block1)(int);
                   2.block定义:等号右边^(参数 参数变量名){}(有参无返回值)
                   void(^block2)(int a) = ^(int a){};
                   3.block定义二:等号右边^返回值(参数类型 参数变量名)(有参有返回值)
                   int(^block3)(int a) =^int(int a){return ;};
                   4.block定义三:没有返回值,没有参数,可以省略(无参无返回值)
                   void(^block4)() = ^{};
             10.2block开发使用场景(block要调用了才会使用里面的内容)
                   1.在同一文件中使用:用strong声明一个属性无参的block,在通过这属性在不同的方法调用
                   2.在不同文件中使用:在模型声明block,到UITableViewDelegate中选中调用,具体问题具体分析
                   3传值:.声明一个带参数的block属性2.在需要传参数控制器中定义block,并在属性中传递参数3.在传值控制器中调用block
            *10.3block内存管理(面试题:block是OC对象吗,去官方文档中查找:working with blocks,上面写了Blocks are Object-C objects)
                   1.内存5个区:堆,栈,方法区,常量区,全局区.
                   2.如何区别ARC,MRC:ARC在dealloc不可以调用[super dealloc],看是否能调用release
                   3.MRC中特点:手动内存管理,需要自己释放内存,开发习惯:访问属性或者设置属性,必须用点语法,不要使用下划线
                   4.MRC没有strong和weak属性, 有assign(相当与weak),retain(相当与strong),copy  
                   5.MRC如何管理block:block放在外部局部变量时或者被static修饰时,放在栈中,其他时候方在全局区(ARC:block放在外部局部变量时,放在堆中)
                   6.MRC注意点:不能使用retain声明block,他放在栈中,只能用copy放在堆中
                   7.ARC如何管理block:外部局部变量,放在堆中:
                   8.ARC注意点:使用strong声明block,不能使用weak:如果没有强指针,就会销毁
             *10.4block循环引用(block对外部强指针强引用,不会对弱指针强引用)
                  1.原理:modVc会强指针指向modal对象(每一个对象都有一个block),modal对象的block会指向block这个对象,block对象中的block当使用self,又会指回modal对象中的block
                  2.解决方案:使用__weak type(self) weakSelf = self;,当吧强指针换成弱指针时,调用self时会把block对象的指向modal的block的block换成弱指针,当销毁一个时,其他就会全部销毁了.
                  3.注意点:还有一种比较难的,当使用延迟操作或异步任务,就需要搞个strongSelf代替self,再在外部搞个弱指针使他们不会被销毁又不会循环引用.

时间: 2024-12-23 11:02:59

流水布局与block深入研究的相关文章

iOS开发——高级篇——流水布局UICollectionViewFlowLayout的基本使用

之前看到过的一篇文章 对collectionView的使用总结的非常好:“iOS6新特征:UICollectionView介绍” 流水布局在现在的应用中很常见了,简单的研究了下,实现下面的功能 那我这里就简单介绍下 UICollectionViewFlowLayout 常用的几个方法,通过这几个方法就能办到上面的效果了 1.布局 /** * 用来做布局的初始化操作(不建议在init方法中进行布局的初始化操作) */ - (void)prepareLayout { [super prepareLa

中国象棋《棋经论》及象棋布局歌诀,值得研究、细细品味

中国象棋<棋经论>及象棋布局歌诀,值得研究.细细品味 象棋博弈高手 2018-09-05 20:38:29 <棋经论> 夫弈棋者,要专心.绝虑,静算待敌,坦然无喜怒挂怀.大抵一局之中,千变万化.如车前马后,发炮逐卒:如电掣雷,炮铺卒行,逼近士.象,如狼奔虎跃.顺手炮,先要活车:列手炮,补士要牢:士角炮,急使车冲:当关炮,横车将路:破象局,中心进卒:解马局,车炮先行:巡河车,赶子有功:归心炮,破象得法:辘轳炮,抵敌最妙:重叠车,兑子最宜.马飞过角,车便巡河.未得路莫离本位,已得势便可

瀑布流/流水布局的解决方案

1.最近做的一个项目用到了流水布局,简单粗暴,找了个demo放进去.刚开始静态页面感觉还不错. demo: http://www.cocoachina.com/ios/20160407/15872.html demo图 最关键的是图片下面还有4个label和一个imageView, 修改demo里的原始布局,让图片和文字高度自适应 图片和文字都没设置高度. 问题一:加载网络图片的时候,下拉刷新,图片高度和文字高度发生变化. 解决方案:计算文字的高度,文字高度固定后,刷新时布局不会发生改变. 计算

页面布局排版-block,inline,float,relative,absolute等

1.span和div的区别 div是块元素(block),span是行内元素(inline): span什么事也不会做,它存在的目的在与为开发者给它所围绕的元素指定样式.div类似,不过它引入了行分隔(其实实质是同第一点) 块元素是指另起一行开始渲染的元素,行内元素是指不需另起一行渲染的元素 示例代码: <div style="background-color: wheat;">我是不带任何样式的的div,我是块级元素,块级元素独占一行</div> <sp

UICollectionViewFlowLayout 流水布局

Model cell @interface ImageCell : UICollectionViewCell @property (nonatomic, copy) NSString *image; @end @interface ImageCell() @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation ImageCell - (void)awakeFromNib { self.im

iOS开发 - UICollectionViewFlowLayout 流水布局

Model cell @interface ImageCell : UICollectionViewCell @property (nonatomic, copy) NSString *image; @end @interface ImageCell() @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation ImageCell - (void)awakeFromNib { self.im

深入理解 flex 布局以及计算_Flexbox, Layout

起因 对于Flex布局,阅读了 大漠老师和其他老师写的文章后,我还是不太理解Flexbox是如何弹性的计算子级项目的大小以及一些其他细节.在大漠老师的帮助下,我去查阅Flexbox 的 W3C 规范文档. 注:本篇博文不适合未接触过Flex 布局的人, 如果想了解flex 布局基础.请参考理解Flexbox:你需要知道的一切 对于flex盒模型的设计期望 flex盒模型是被期望设计成: 在任何流动的方向上(包括上下左右)都能进行良好的布局 可以以逆序 或者 以任意顺序排列布局 可以线性的沿着主轴

非等宽图片列表的布局

各大搜索引擎的图片频道的搜索结果页,搜索出来的结果都是较零碎的图片,图片质量.尺寸都是参差不齐的,并限定了每一行的总宽度.这种非等宽的图片列表,在Google+.flickr也都有用到. 最近刚好对360搜索的图片搜索结果页进行了一次重构和改版,对于这种图片布局也花心思研究了一番,接下来说说我的一些处理思路. 非等宽的单个图片要排列到一个固定了宽度的容器中,那么这个等宽的容器就是最大的限制和障碍,开始怀念那种常见等宽瀑布流的布局(没有限制真好). 先理下基本的需求: 1.图片的宽度是不固定的:

自定义UICollectionViewController之后 如何设置UICollectionView的布局方式

我们很多时候使用UICollectionView 可能都是直接创建 UICollectionView   通过初始化的时候  传入一个布局对象的方式来使用UICollectionView 比如我们之前是这样写得: 1 UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 2 3 UICollectionView *collection = [[UICollectionView alloc]