问题点描述: 我新建一个线程,并在这个线程中,把某个控件的父级去掉或者更改,导致报这个异常 网上的解析如下: “Windows 窗体”使用单线程单元 (STA) 模型,因为“Windows 窗体...”基于本机 Win32 窗口,而 Win32 窗口从本质上而言是单元线程。...STA 模型意味着可以在任何线程上创建窗口,但窗口一旦创建后就不能切换线程,并且对它的所有函数调用都必须在其创建线程上发生。...STA 模型要求需从控件的非创建线程调用的控件上的任何方法必须被封送到(在其上执行)该控件的创建线程。...如果您在控件中为大量占用资源的任务使用多线程,则用户界面可以在背景线程上执行一个大量占用资源的计算的同时保持可响应。 用人话描述为:控件是属于主线程(UI线程),不可以跨线程修改其父级。
如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~ 本文是“为什么我建议”系列第二篇,本系列中会针对一些在高并发场景下,我对于组内后台开发的一些开发建议以及开发规范的要求进行说明和分析解读...往期回顾: 为什么我建议在复杂但是性能关键的表上所有查询都加上 force index 在业务一开始上线的时候,我们线上日志级别是 INFO,并且在日志内容中输出了代码位置,格式例如: 2022-03...模拟两种方式获取调用打印日志方法的代码位置,与不获取代码位置会有多大性能差异 以下代码我参考的 Log4j2 官方代码的单元测试,首先是模拟某一调用深度的堆栈代码: 然后,编写测试代码,对比纯执行这个代码...由此,我建议:对于微服务环境,尤其是响应式微服务环境,堆栈深度非常深,如果会输出大量的日志的话,这个日志是不能带有代码位置的,否则会造成严重的性能衰减。...我们在关闭输出代码行位置之后,同样压力下,CPU 占用不再那么高,并且整体吞吐量有了明显的提升。
普通的 UIView 不具备滚动功能,不能显示过多的内容。...UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容 1.1 工作原理 在缩放的时候,原理是操作被缩放控件的的transform数值。...通过修改 contentOffset 调整内部视图的坐标位置,从而给用户产生一种视觉上的滚动的效果 contentOffset 的值本质上就是 bounds 的原点(origin) 值,苹果在为了方便程序员的理解...和普通的内边距作用相反,不是让内容向里面缩进。是在不改变原有的contentSize基础上,让scrollView中的内容向四周多滚动一些。...有一个重要属性: UIEdgeInsetsMake 用来描述内部控件最终可以弹回的位置属性,里面的值是上、左、下右
UIScrollView在开发中是一个非常常用的控件,UIScrollView具有水平、垂直滚动和缩放效果。但是尽然没有响应单击事件这个事件。而这个事件在日常的交互中是非常需要的。...比如当用于单击或轻触图片的某个位置时,给于一些交互性提示。 下面我将用例子说明一下如何给UIScrollView添加一个单击的响应。...但是这里注意一下 [self.nextResponder touchesEnded:touches withEvent:event];这句话的意思是将UIScrollView上的单击事件往下传递,传递到它的父...这样如果父UIView上实现了touchesEnded这个方法,也会响应到。但是这样的写法经过测试在IOS5.0以前的版本可以。但IOS5以后的(包括5)这不能往下传递,这里我也不知道为什么。...本来我想用UITapGestureRecognizer来实现的,但是直接引发异常。不明白为什么UITapGestureRecognizer不能注册在UIScrollViews上。
今天有同事跑过来说遇到了一个奇怪的bug,同样的程序在win7和win10上界面相差了2个像素 ---- 一开始我们以为是半像素或者是分辨率的问题。 结果调试了很久都没有结果。...不过意外的我们发现了另一个奇妙的东西。...下面两个图分别是在win7和win10情况下soonp获得的可视化树(已用demo替换) image.png image.png 有么有发现TabControl的子元素Grid多出了一个名字templateRoot...在代码里面查找,发现并没有这个名字的Grid,所以可以确定这个是来自TabControl的默认Style 所以我们找到win7和win10 下的默认主题 Aero和Aero2 查找方法可以参见博客默认的...当然对于这样子的问题的确不是很好定位,因此我们有两种可行的解决方案 1、尽量在关键界面使用自定义样式,对元素的呈现细节进行控制 2、在App.xaml中指定主题样式。
接口通知客户端,客户端对原生控件frame位置大小属性做对应的修改; 页面离开时,removeCanvas接口的调用将画布控件从webview上移除。...WKWebView解析HTML在客户端生成对应的原生控件示例) 如上图所示,WKWebView将在解析HTML时将该标签位置生成一个对应的UIScrollView控件。...利用这个属性,我们可以在开发者期望插入原生控件的位置,预生成一个包含overflow标签的DIV节点,然后在插入原生控件时,将原生控件插入到该标签对应的UIScrollView上,就可以做到“原生控件不遮挡...,并通过“组件API”insertContainer通知客户端该滚动条的位置、大小; b、客户端根据insertContainer传入的位置和大小,在WKWebView下遍历找到这个DIV标签对应的UIScrollView...,并将控件插入到该UIScrollView下; d、当页面的DOM元素发生变化时,需要通过updateContainer告诉客户端调整指定的原生控件的大小,客户端根据参数调整原生控件的大小(位置不需要调整
UIScrollView的常见属性 @property(nonatomic) CGPoint contentOffset; 这个属性用来表示UIScrollView滚动的位置 (其实就是内容左上角与scrollView...左上角的间距值,初始位置) @property(nonatomic) CGSize contentSize; 这个属性用来表示UIScrollView内容的尺寸,滚动范围(能滚多远) @property...(nonatomic) UIEdgeInsets contentInset; 这个属性能够在UIScrollView的4周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住 @property...默认是 _scrollView 的宽度 _scrollView.pagingEnabled = YES; UIScrollView不能滚动的条件 contentOffset属性 AntoLayout 取消...,并且是弱指针 代理协议的格式:控件类名Delegate,比如UIScrollViewDelegate、UITextFieldDelegate 代理方法:方法名一般是控件名开头,比如UIScrollView
当手势在处理的过程中,滚动视图不能够给子视图,发送任何跟踪的调用。...这里的例子是在scrollView上放置4个2排2列的视图,但是内存中只占用6个视图的内存空间。当scrollView滚动的时候,通过不停的重用之前视图的内存空间,从而达到节省内存的效果。...,是用来在视图上画数字的,这样就可以看到视图重用的效果了,应该是从0开始到无穷多,但是实际上内存中就创建了6个视图。...在滚轴视图中,有一个叫做ContentOffset的属性跟踪UIScrollView的具体位置,你能够自己获取和设置它,ContentOffset是你当前可视内容在滚轴视图边界的左上角那个点。... scrollsToTop是UIScrollView的一个属性,主要用于点击设备的状态栏时,是scrollsToTop == YES的控件滚动返回至顶部。
https://blog.csdn.net/u010105969/article/details/79912517 背景: 公司项目中有一个需求:在首页上添加一个纵向滚动的文字轮播广告。...轮播效果图 实现过程: 上网搜索相关demo 搜到一个demo,demo是利用UIScrollView实现的 思考:既然能用UIScrollView实现为什么不用UITableView去实现呢?...使用UITableView就不用考虑复用以及调整scrollView上子控件位置的问题了。...手动敲代码利用UITableView实现具有需求效果的控件,可当UITableView滑动到最后一个cell再滑动到第一个cell的时候出现问题(并不能很流畅地从最后一个cell滑动回第一个cell)。...手动敲demo: 先在当前控制器的view上添加一个UICollectionView,每个item的大小等于UICollectionView的大小。
UICollectionView 是 iOS6 之后引入的一个新的 UI 控件,与 UITableView 有着很多相似的地方,在开发过程中我们都会选择使用它们俩来为 App 的整个页面进行布局,比如说淘宝的首页...// 轮播次数 private var loopTimes = 100 // 分页控件位置 public var pageControlAliment: PageControlAligment...不等于自定义类型时,只能影响当前分页控件的大小,不能影响分页控件原点的大小 public var pageControlDotSize: CGSize = CGSize(width: 10, height...,但是如果要正式在 app 中使用,并且达到很好的用户体验还是有很大的优化空间的。...,代码比较多(比较乱),有的同学可能看的不是很明白,那是因为我展示的代码只是局部的代码片段,主要是想给大家简单的讲述一下我的实现思路,因为用手机看公众号文章如果贴上所有的代码,对于大家的阅读体验是非常不好的
对于 MySQL 慢 SQL 的分析 在之前的文章,我提到过 SQL 调优一般通过下面三个工具: EXPLAIN:这个是比较浅显的分析,并不会真正执行 SQL,分析出来的可能不够准确详细。...但是不能直观的看出来为啥会走错索引,需要通过 OPTIMIZER TRACE 进行进一步定位。但是在进一步定位之前,我想先说一下 MySQL 的 InnoDB 查询优化器数据配置。...这也引出了一个新的可能大家也会遇到的问题,我在原有索引的基础上,加了一个复合索引(举个例子就是原来只有 idx_user_id,后来加了 idx_user_status_pay),那么原来的只按照 user_id...并且索引不能随便加,想加多少加多少,也有以上说的这两个原因,这样会加剧统计数据的不准确性,导致用错索引。 手动 Analyze Table,会在表上加读锁,会阻塞表上的更新以及事务。...结论和建议 综上所述,我建议线上对于数据量比较大的表,最好能提前通过分库分表控制每个表的数据量,但是业务增长与产品需求都是不断在迭代并且变复杂的。很难保证不会出现大并且索引比较复杂的表。
原则2:subviews的size不能依赖于UIScrollView 因为UIScrollView的size依赖于subviews,而如果subviews的size再依赖于UIScrollView,就类似于操作系统中的死锁了...二、正确的姿势 1、在StoryBoard中拖入一个UIScrollView。 2、设置UIScrollView的约束。...例如Pin上、下、左、右边距都为0,此时UIScrollView将占据整个ViewController’s view的界面。...明明设置了宽和高了呀,如果不做这一步,UIScrollView还是不能滚动,因为这4个Pin约束实际上是用于告诉UIScrollView:我会把你的内容“撑到”多大。...如果contentView的4条边发生变化,UIScrollView会自动调整contentSize。 5、接下来就是在contentView上布局项目中需要的界面了。
而在这个模块上,我们有某个或某些viewController需要禁用侧滑手势(一般需要禁用侧滑手势是因为返回或退出当前viewController时需要double confirm,在一些填表的页面比较常见...:[self.navigationController screenEdgePanGestureRecognizer]]; 二 导航栏的back按钮 在了解导航栏的返回按钮之前,我们先了解一下导航栏管理导航栏上各类控件的...最重要的一部分我用蓝色加粗标出来了,就是说这个UINavigationBar主要是由左右按钮控件、中间标题控件组成。...原生的导航条上的返回(back)按钮,一般是显示一个返回箭头+上一页面的标题(或者是 返回箭头+Back),如下图右边所示。 ?...首先,我们来说一下leftBarButtonItem、rightBarButtonItem,这两个是孪生兄弟,唯一的区别就是在导航条上的位置,顾名思义,leftBarButtonItem在导航条左侧,rightBarButtonItem
UIScrollView是iOS开发中经常用到的UI控件,像图片轮播之类的效果都可以用UIScrollView来实现,当然轮播什么的网上有很多教程了,我就不多说了。...然后就是在 scrollViewDidScroll这个委托方法中做一点处理: func scrollViewDidScroll(scrollView: UIScrollView) { let offsetY...= statusHeight { //防止滑动过快导致控件停留在错误的位置 menuBtnsView.frame.origin.y = statusHeight...Y轴上的偏移量。...感兴趣的同学可以看一下我单独为这个效果写的一个简单Demo,clone下来自己跑一下,琢磨琢磨应该就明白了。
然鹅这些粗粒度的统计产品往往不能全面很好的辅助互联网公司做好用户采集和建立用户画像模型,因此有条件的公司内部会做自己的用户行为埋点统计,打造一套自己的用户行为分析平台…… 数据埋点采集对产品的意义 UI...控件在iOS移动端承载这丰富的信息输出,用户在使用浏览中会留下丰富的数据采集信息 A用户会慢慢的逐条浏览呈现的产品 B用户往往会快速滑动进行浏览 C用户会快速的翻页进行浏览 上面的三种用户基本涵盖了这个...目前可以这么定义---当页面滑动结束或首次加载完成时呈现给用户的所有商品均算是曝光 UITableView中用户浏览中略过的商品条目 这个就有意思了,用户在快速浏览中可能会快速滑动翻页,更有甚者直接快速滑动之后让列表自己滑动...对于用户滑动过程中忽略掉的条目比较复杂--上滑 下滑 手指按着屏幕滑动 在讲解之前我们先要处理一个问题:怎么判断屏幕滑动的方向 在系统中我们根据给定的Pan手势的移动来判断 extension UIScrollView...采集结果 我们来分析一下这个结果是如何获取的 1 记录最底部的位置(需要完全展示)v0 2 滑动之后自由滑动需要超过一屏幕 3 结束滑动记录顶部位置v99+ 那么v0~v99+ 之间的即是快速滑动过程中没被用户认真浏览的数据
欢迎大家在 Discord 频道[2] 中进行更多地交流判断一个可滚动控件( ScrollView、List )是否处于滚动状态在某些场景下具有重要的作用。...: UIScrollView, willDecelerate decelerate: Bool)手指拖动结束后( 手指离开时 ),调用此方法在 SwiftUI 中,很多的视图控件是对 UIKit( AppKit...preference 与 onChange 的调用时机非常类似,只有在值发生改变后才会传递数据。在 ScrollView、List 发生滚动时,它们内部的子视图的位置也将发生改变。...我正以聊天室、Twitter、博客留言等讨论为灵感,从中选取有代表性的问题和技巧制作成 Tips ,发布在 Twitter 上。...每周也会对当周博客上的新文章以及在 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅下方的 邮件列表[9],可以及时获得每周的 Tips 汇总。
我们平时在设计页面的时候,考虑到MVC的设计模式会出现很多层的试图分离,这里面就不可以避免的出现自定的控件。 我在一次自定义控件中出现了以下问题,记录在案以供大家注意和参考。...---- (1)UIScrollView 对于加载在它上层试图中的手势无影响,但对上上层时图的手势就会失去响应。具体原因考虑到是 UIResponder 的事件传递中出现了事件劫持。...但是要求子试图的 大小要跟屏幕一样大才行,一般自定义控件可能是很小的,所以这个自定义控件就不能继承 BaseView,它的上层View可以继承于 BaseView ,使用代理,当自定义控件中的UITextFeild...被编辑时通知上层试图,调用上层试图处理键盘遮罩的方法,动态的改变上层试图的位置即可。...(3)给自定义控件初始化的时候可以使用Frame,也可以使用Layout 使用Frame:x,y 坐标初始化为0,大小确定即可,使用Layout 来布局位置。
大家好,又见面了,我是你们的朋友全栈君。...的基类) 1.在BaseViewController写入 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event...分别取消第一响应者 [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; } 注:点击添加在self.view上的控件已经可以响应了...,但是ScrollView上的控件不会响应。...textFiledView已经可以响应了,但是ScrollView上的button还是不能响应 3.
[image.png] [image.png] 主要有两部分需要注意,一个是顶部状态栏(俗称刘海)高度高了24pt,而且中间的刘海部分不能显示内容。...因此对于一般的界面,如列表页,tab页等具有大量内容的页面应该是不推荐将状态栏隐藏,不然反而让信息显得不完整。但是一些追求沉浸体验的页面,如视频浮层、图片浮层例外。...,当我们在全屏界面隐藏了状态栏之后,statusBarFrame获取到的size为0,可能会出现控件布局错乱,因此最稳妥的方法还是判断是否iPhone X返回一个常数,如下所示。...这个坑可能不能算是iPhone X的坑,应该是iOS11的坑,也可以说是被弃用的UIWebView的坑,就是调整UIScrollView内部偏移的方法改为设置contentInsetAdjustmentBehavior...然而,对于UIWebView,我们通过一般方法只能设置其最外层的UIScrollView的behavior,对于里层的UIScrollView就无能为力了,因此我们需要hook系统创建UIWebView
frame是视图在屏幕中展示的位置和大小,也就是可视区域的位置和大小。 contentSize是scrollView视图的内部内容可以滚动的区域大小,也就是scrollView视图内容的实际大小。...UIScrollView的一些常用的代理方法如下: #pragma mark - UIScrollViewDelegate //监听页面滚动,根据scrollView.contentOffset来做业务逻辑...用于页面滚动停止的时候开启一个逻辑,比如视频自动播放(页面停止滚动后,开启视图滚动前暂停的gif或者视图的播放) - (void)scrollViewDidEndDecelerating:(UIScrollView...上图是我在知乎首页的一个截图。 首先,整个从上而下它是一个tableView+collectionView。...上,然后这个scrollView的pagingEnabled要设置成YES,这样才能实现翻页的效果。
领取专属 10元无门槛券
手把手带您无忧上云