要知道,UITextView是继承UIScrollView的。...UITextView输入文字过多时是可以用手上下拖动浏览内容的,所以可以猜想是和UIScrollView有关系。...好了,知道其集成UIScrollView就好办了,因为UITextView只有在输入内容超过其显示范围才可以拖动,那就知道输入文字的bound就是UIScrollView的contentSize。...对于第二点,根据计算出的高度重绘界面布局即可。这里我用的是自动布局,每次高度改变就刷新布局关系就行。...EssayEditDelegate @optional - (void) onTextViewLineCountChangeTo:(NSInteger)lines; @end 在每次输入内容的时候计算行数
4滑动UIScrollView的时候。 5旋转Screen会触发父UIView上的layoutSubviews事件。...2、该方法在调用sizeToFit后被调用,。 3、通过设置contentMode属性值为UIViewContentModeRedraw。...那么将在每次设置或更改frame的时候自动调用drawRect:。...4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect PS: 重绘操作在drawRect方法中完成,不建议直接调用drawRect方法,当然调用此方法,结果没有任何效果的...我们调用UIView类中的setNeedsDisplay方法,则程序会自动调用drawRect方法进行重绘。
因此我们在这种方法中,强制裁剪框重绘(maskview): #pragma mark - UIContentContainer protocol...而圆形 剪切框的位置、大小在每次转屏之后可能发生变化,因此我们必需要在每次maskView 的drawRect方法调用之后都又一次调整一下scrollview的属性。...每次当重绘 发生后就通过代理方法通知viewcontroller调整scrollview的各项属性: // TTPhotoMaskView.h...contentInset能够理解为展示内容的上下左右“留白”的间距。默认值为(0,0。 0。...你仅仅需设置放缩的最大和最小倍数, 然后在代理函数(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 中返回要缩放的view就可以
抓包分析微信的消息,发现发送同样的内容,抓取到的数据包内容都不相同。这到底是怎么回事呢? 显然,微信并不是每次发送消息都跟服务器端约定秘钥(如果那样,性能和流量恐怕大家都不能接受)。...那每次加密内容都不一样到底是怎样实现的呢? 基本思路分为两个部分 1、秘钥交换。...微信(之后称客户端)每次与微信服务器(之后称服务端)建立TCP长连接后,首先进行握手操作(handshake),这个过程类似https或ssl的秘钥交换过程。 2、秘钥加盐。...在每次发送消息是,客户端向秘钥加“盐 ”,再将“盐”随着消息发往服务端。而这个“盐”,往往是消息协议中随每次消息发送变化的合法内容。 貌似这两条有点抽象,后边会有具体步骤说明。...并将加密后的R2发给客户端。 5、客户端采用AES算法,以R1为秘钥,解密得到R2. 至此,客户端和服务端均得到R1,R2 6、客户端发送数据。
时,也会触发 2、addSubview会触发layoutSubviews 3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 4、滚动一个UIScrollView...-drawRect:(CGRect)rect方法:重写此方法,执行重绘任务 -setNeedsDisplay方法:标记为需要重绘,异步调用drawRect -setNeedsDisplayInRect...:(CGRect)invalidRect方法:标记为需要局部重绘 sizeToFit会自动调用sizeThatFits方法; sizeToFit不应该在子类中被重写,应该重写sizeThatFits...根据Apple官方文档,layoutIfNeeded方法应该是这样的 layoutIfNeeded遍历的不是superview链,应该是subviews链 drawRect是对receiver的重绘...,能获得context setNeedDisplay在receiver标上一个需要被重新绘图的标记,在下一个draw周期自动重绘,iphone device的刷新频率是60hz,也就是1/60秒后重绘
时,也会触发 2、addSubview会触发layoutSubviews 3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 4、滚动一个UIScrollView...-drawRect:(CGRect)rect方法:重写此方法,运行重绘任务 -setNeedsDisplay方法:标记为须要重绘,异步调用drawRect -setNeedsDisplayInRect...:(CGRect)invalidRect方法:标记为须要局部重绘 sizeToFit会自己主动调用sizeThatFits方法; sizeToFit不应该在子类中被重写,应该重写sizeThatFits....依据Apple官方文档,layoutIfNeeded方法应该是这种 layoutIfNeeded遍历的不是superview链,应该是subviews链 drawRect是对receiver的重绘...,能获得context setNeedDisplay在receiver标上一个须要被又一次画图的标记,在下一个draw周期自己主动重绘,iphone device的刷新频率是60hz,也就是1/60秒后重绘
移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限。当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容。...UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容 1.1 工作原理 在缩放的时候,原理是操作被缩放控件的的transform数值。...缩放结束后 scrollView 本身的 frame 并没有发生变化 缩放结束后 imageView 本身的 bounds 也没有发生变化 缩放结束后 imageView 的 center 发生了变化...- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{ return self.imageView; 正在缩放时调用的方法...- (void)scrollViewDidZoom:(UIScrollView *)scrollView 缩放完成时调用的方法 - (void)scrollViewDidEndZooming
touchesShouldCancelInContentView:(UIView *)view; 重写这两个方法可以控制起子视图的事件响应 @property(nonatomic) CGFloat minimumZoomScale; 设置内容最小缩放比例...@property(nonatomic) CGFloat maximumZoomScale; 设置内容最大缩放比例 @property(nonatomic) CGFloat zoomScale; 设置缩放比例...- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; 视图动画结束时触发的方法,使用set方法设置偏移量后回触发...:(UIScrollView *)scrollView withView:(UIView *)view; 视图内容将要开始缩放时触发的方法 - (void)scrollViewDidEndZooming...:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale; 视图内容结束缩放时触发的方法 - (BOOL)scrollViewShouldScrollToTop
(nonatomic,readonly,getter=isDragging) BOOL dragging; //25.返回的内容是否在滚动视图后,用户接触他们的手指(只读) @property(nonatomic...:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view; //29.它开始发送跟踪邮件的内容视图后动视图调用此方法...3_0); //35.一个布尔值,决定当当缩放超过上限或是下限时是否滚动视图推动内容缩放 @property(nonatomic) BOOL bouncesZoom; //36.一个布尔值 指示内容是否认为正在方法或者缩小...view NS_AVAILABLE_IOS(3_2); //52.缩放结束时候调用 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView.../拖拽调用得方法(返回的是需要进行缩放的控件) -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return
1 UIScrollView原理 在滚动过程当中,其实是在修改原点坐标。当手指触摸后,scroll view会暂时拦截触摸事件,使用一个计时器。...1.1 核心原理 UIScrollView的核心理念是,它是一个可以在内容视图之上,调整自己原点位置的视图。它根据自身框架的大小,剪切视图中的内容,通常框架是和应用程序窗口一样大。...一个滚动视图也可以控制一个视图的缩放和平铺。当用户做捏合手势时,滚动视图调整偏移量和视图的比例。当手势结束的时候,管理视图内容显示的对象,就应该恰当的升级子视图的显示。...几个属性介绍: tracking 当 touch 后还没有拖动的时候值是YES,否则NO zoomBouncing 当内容放大到最大或者最小的时候值是 YES,否则NO zooming... 当正在缩放的时候值是 YES,否则NO decelerating 当滚动后,手指放开但是还在继续滚动中。
/inpaint masked、绘制非蒙版内容/inpaint not masked,这个很好理解,选择第一个就是只在蒙版区域重绘,另一种则相反,正常一般默认第一个即可Inpaint area: 绘制区域...全图重绘是指在原图大小的基础下绘制蒙版区域,优点就是内容与原图融合的更好,缺点是不够细节;而蒙版重绘是只处理的时候将蒙版区域进行放大到原图的尺寸,画完之后再缩小放到原图的相应的位置,优点就是细节更好,缺点也是细节太多...,与原图融合的不够好Denoising strength: 重绘强度,默认0.75,低强度就是基本不重绘,越高重绘越强,融合越不好,所以默认即可虽然图生图的参数比较多,但大多数的时候,我们选择默认即可,...迭代次数设置成多少生成的图片就是多少张,一般设置2-4,防止显卡撑不住 ▶ 最终的重绘强度 Final denoising strenght 设置成了 0.88 ▶ 重绘曲线选择 Linear ▶ 迭代中反推提示词选择...AI 只在白色区域进行了重绘,而圈出的黑色是没有重绘的还有最后一个批量处理功能,用的不多,也不用讲太细,只要输入图片所在目录路径、图片处理后保存的路径以及蒙版路劲即可批量处理图片
*)scrollView{ NSLog(@"即将开始滑动内容时"); } - (void)scrollViewDidScroll:(UIScrollView *)scrollView{...)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ NSLog(@"减速完毕,停止滑动"); } ScrollerView缩放的代理回调...(@"开始缩放"); } - (void)scrollViewDidZoom:(UIScrollView *)scrollView{ NSLog(@"缩放"); } - (void)scrollViewDidEndZooming...:(UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale{ NSLog(@"结束缩放...设置为YES,滚动视图在完成滚动到内容顶部时发送此消息 - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{ NSLog(@"
缺陷:这两种方案都会引发频繁的重排和重绘 可以借助chrome devtools performance来验证一下页面的情况 小小的一个进度条触发了那么那么多次重排和重绘,那么它到底有什么影响呢?...重绘:不是所有的DOM变化都影响元素的几何属性,如果改变元素的背景色并不影响它的宽度和高度,这种情况,只会发生一次重绘,而不会发生重排,因为元素的布局没改变 所以知道了重排和重绘造成的严重问题后,我们马上对其进行分析优化...边框、高度等)、内容改变(如:文本改变或图片被另外一个不同尺寸的图片替代)、浏览器窗口尺寸的改变、通过display: none隐藏⼀个DOM节点等 触发重绘的因素:重排必定触发重绘(重要)、通过visibility...解决方案:启用GPU加速,避开重排和重绘的环节,将进度条单独提升到一个图层,即不影响其它元素 就单独针对第二种方案进行优化吧~我们只需要改动其css内容即可(标注出即为改动处) @keyframes play...,剩余的基本都是页面最基本的重排和重绘了。
self.scrollView.backgroundColor = [UIColor greenColor]; //设置显示内容的大小,这里表示可以下滑十倍原高度 self.scrollView.contentSize...,超出后弹回 self.scrollView.bouncesZoom = YES; //设置委托 self.scrollView.delegate = self;...} //开始缩放时调用 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView...*)view{ } //结束缩放时调用,告知缩放比例 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView...withView:(UIView *)view atScale:(CGFloat)scale{ } //已经缩放时调用 - (void)scrollViewDidZoom
重绘:不是所有的DOM变化都影响元素的几何属性,如果改变元素的背景色并不影响它的宽度和高度,这种情况,只会发生一次重绘,而不会发生重排,因为元素的布局没改变 所以知道了重排和重绘造成的严重问题后,我们马上对其进行分析优化...边框、高度等)、内容改变(如:文本改变或图片被另外一个不同尺寸的图片替代)、浏览器窗口尺寸的改变、通过display: none隐藏⼀个DOM节点等 触发重绘的因素:重排必定触发重绘(重要)、通过visibility...解决方案:启用GPU加速,避开重排和重绘的环节,将进度条单独提升到一个图层,即不影响其它元素 就单独针对第二种方案进行优化吧~我们只需要改动其css内容即可(标注出即为改动处) @keyframes play...可以很明显地看到页面重排重绘的次数减少了很多很多,剩余的基本都是页面最基本的重排和重绘了。...,我们优化后性能都大约提升了大约40% ~ 54% 那么如果在正常的项目中,考虑到页面的复杂性,我们优化后的方案既避免了页面反复得计算渲染,又避免了重绘回流,可想而知在那种情形下性能的提升应该是远不止40%
底层原理介绍 03:08图生图基本流程 二、图生图基本流程 (一)图生图的三个关键步骤:导入图片→书写提示词→参数调整 (二)图生图界面介绍 1.主体结构与文生图区别不大 2.新增:导入图片区域和重绘幅度...03:30导入图片方式 导入图片方式: (1)直接拖动图片到对应位置 (2)单击导入图片区域打开资源管理器选取图片 04:22重绘幅度 重绘幅度:跟原图有多像 05:55参数设置 实现生成漫画效果推荐值...:0.6~0.8 太高容易导致画面变形,太低画面看不出效果 04:01图生图也需要提示词 3.图生图也需要提示词(同样重要) 05:06 (1)没有提示词,AI只会提取图片信息,get不到画面里的具体内容...5.生成其他尺寸的图片,推荐在电脑上用其他软件裁切成预想的比例再导入 06:41缩放模式 6.缩放模式: *直接缩放(放大潜变量)不推荐使用,对显存要求很高 *图生图的进阶功能将在第七课介绍...: 使用不同的随机种子出来的效果就随机性强 使用同一个随机种子,生成的图像就会有很多相似之处 (因为用同一套方法随机出来的) 08:30功能按钮 (三)功能按钮 1.骰子:把随机参数设置为-1 (每次都抽一张新卡
UIKit 为 UIView 提供了这些方法来进行视图的更新与重绘: public func setNeedsLayout() public func layoutSubviews() public func...setNeedsDisplayInRect: 会给当前 UIView 立一个 flag,以表示后续应该调用 drawRect: 方法,以进行视图重绘...Cycle Apple 官方文档已经明确说明,开发者不应该直接调用 layoutSubviews 与 drawRect: ,而应该在你认为系统默认的布局和重绘不能带给你想要的效果时...、重绘机会所组成的循环**。...那么如果我想要这个直线一直根据两个点同步变化的话,就需要在 dotView 的位置发生改变时,执行: lineView.setNeedsDisplay() // 重绘 lineView
CSS隐藏元素的几种方式 前言 开始之前,先来了解一下回流和重绘的概念。...(经小伙伴评论提醒,后来加的内容) 回流:当我们修改元素的几何位置属性,如宽度、高度时,浏览器会重新布局,这个过程就叫回流 重绘:当我们修改元素的绘制属性,如背景色、颜色等,浏览器不会重新布局,但是需要重新进入绘制阶段...,这个过程就是重绘。...回流一定会触发重绘,重绘不一定会触发回流 display: none 最常见的隐藏元素的方法,不会渲染该元素,所以该元素不会占位置,也不会响应绑定的事件。...; } transform属性不会触发回流、重绘。
DOM的直观展现,这个过程可以理解为定义每个对象的样子 (4)对渲染树上的每个对象计算坐标,这个过程可以理解为定义每个对象的位置 (5)渲染树上的元素最终展示在浏览器里,这一过程称为“painting” 重绘...重排 Reflow 发现以下动作时,浏览器会进行重排: (1)DOM元素添加、删除、修改,或者元素顺序的改变 (2)内容变化,包括表单域内的文本改变 (3)CSS属性的改变 (4)添加或删除样式表 (...5)更改“类”的属性 (6)浏览器窗口的操作(缩放,滚动) (7)伪类激活(悬停) 重绘重排优化 在页面开发中,很难避免对DOM的操作,为了降低浏览器重绘重排的性能消耗,应该记住一个基本原则: 尽量少的触发重绘重排...代码示例: var $body = $('body'); $body.css('padding', '1px'); // 重绘重排 $body.css('color', 'red'); // 重绘 $...body.css('margin', '2px'); // 重绘重排 这三个操作连在一起,浏览器会缓存这些改变,在代码运行完毕后再将这些改变经一次通过加以应用,实际上浏览器只进行一次重绘重排操作 下面的代码就是错误操作的示例