首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当按下UIButton时整个视图被卡住

,可能是因为按钮点击事件触发了一个耗时的操作,导致主线程被阻塞而无法响应其他事件。为了解决这个问题,可以采取以下几种方式:

  1. 异步操作:将耗时的操作放在后台线程中执行,避免阻塞主线程。可以使用GCD(Grand Central Dispatch)或者NSOperationQueue来实现异步操作。相关链接:GCDNSOperationQueue
  2. 使用多线程:将耗时的操作放在单独的线程中执行,保持主线程的响应性。可以使用NSThread或者NSOperation来创建和管理线程。相关链接:NSThreadNSOperation
  3. 使用DispatchQueue:将耗时的操作放在后台队列中执行,然后在主队列中更新UI。可以使用DispatchQueue来实现。相关链接:DispatchQueue
  4. 使用异步网络请求:如果耗时操作是网络请求,可以使用异步网络请求库(如NSURLSession)来发送请求,避免阻塞主线程。相关链接:NSURLSession
  5. 优化耗时操作:如果耗时操作无法避免,可以考虑对其进行优化,减少执行时间,或者将其拆分成多个较小的任务并进行分批处理。

总结起来,解决按钮点击导致视图卡住的问题,关键是将耗时操作放在后台线程或者异步执行,以保持主线程的响应性。同时,根据具体情况选择合适的多线程技术或者异步操作方式来实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS 事件传递和处理

思考: UIView在调用子视图hitTest,是先调用哪些子视图? 从subview数组的末尾开始调用hitTest,subview数组下标越小,视图层级越低。...UIKit确定目标视图后的过程 UIKit确定目标视图之后,就会创建UITouch,UITouch的window属性和view属性就是上面过程中的UIWindow和目标视图。...,目标视图会首先调用touches方法,接着是目标视图的父视图,再是父视图的父视图,如果某个视图是ViewController的.view属性,还会调用ViewController的方法,直到UIWindow...手势的touchesBegan:withEvent:处理完成之后,便会触发目标视图的touchesBegan方法。...总结 所以综上三步,我们可以知道整个流程大概是: 寻找目标视图:UIApplication->UIWindow->ViewController->View->targetView 手势识别:UIGestureEnvironment

1.4K20

《Motion Design for iOS》(四十二)

我很喜欢的Loren构建的一个关于界面的东西可能不是每个人都明显喜欢的:我喜欢每个按钮在用户立即切换到一个不同的状态的样子。绝对不会延迟。...子类化一个苹果提供的对象,比如UIButton,做一个好的城市居民并确保调用super的关于这些方法的实现是很重要的,因为我们不知道苹果在这两个方法中需要运行什么代码,而且不想破坏按钮的默认行为。...使用Pop来构建好的响应动画去关联触摸动作,一个聪明的做法是看看是否已经有一个Pop动画关联到这个视图或者layer了。如果有,只要更新已经存在的动画的toValue属性就可以了。...的toValue以及触摸结束的1.0的toValue,你就可以猜到整个动画会在用户点击按钮稍微收缩按钮的尺寸,然后会在他们停止触摸弹回完整的尺寸。...// 当用户开始点击立即调用 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { // 看动画是否已经添加到视图或者

32310

【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

也要注意一有多个button的排列顺序。 (5)我们创建的这些导航条button有非常多种形式。...有的是由文字的,有的图片,有的系统自带的如摄像头或者Reply这些icon,有的全然是自定义的视图。...,相当于进入子页面 UIButton *btn1=[UIButton buttonWithType:UIButtonTypeRoundedRect]; btn1.frame=CGRectMake...事实上它们有的不透明有的透明有的半透明,但不知为何无效果 self.navigationController.navigationBar.barStyle=UIBarStyleDefault...后者赋值一个UIBarButtonItem对象,所以仅仅能显示一个 //显示顺序,左边:数组顺序从左向右;右边:数组顺序从右向左 //能够初始化成系统自带的一些barButton,

2.2K10

1.注册或登录页面设计:UILabel,UIButton,UITextField

confirmButton addTarget:self action:@selector(confirm:) forControlEvents:UIControlEventTouchUpInside];//button又抬起后发生的事件...textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGRectMake(20, 20, 130, 30)]; //输入框没有内容...按钮高亮的情况,图像的颜色会被画深一点,如果这下面的这个属性设置为no, * 那么可以去掉这个功能 */...button1.adjustsImageWhenDisabled = NO; /* 下面的这个属性设置为yes的状态,按钮会发光*/ button1.showsTouchWhenHighlighted...confirmButton addTarget:self action:@selector(confirm:) forControlEvents:UIControlEventTouchUpInside];//button又抬起后发生的事件

2.3K50

iOS UI控件了解一

一个view设置bounds,会把自己当成一个容器,定义自己的边界大小以及左上角的初始坐标。视图添加到此视图,会根据bounds指定的原点(0,0)计算frame,而非左上角。...在App中UITextField出现频率也比较高; (2)iOS系统借助虚拟键盘实现输入,点击输入框,系统会自动调出键盘,方便 你进一步操作。...7)外观控制: UITextField同样提供了外观控制的API,包括边框样式、清除按钮、辅助视图等; ? 3. UIButton 1)UIButton是什么?...(1)UIButton(按钮):是响应用户点击的控件。在App中UIButton是出现频率很高的控件; (2)UIButton与UILabel、UITextField侧重点不同,侧重于处理点按。...当然UIButton类也提供了一些方法控制按钮外观。 2)如何使用UIButton

2.6K20

【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

// 通常来说的,当应用程序突然中断(比如有电话、短信进来时),系统将会回调该方法 // 另外,当用户离开该程序,程序开始转入后台状态也会回调该方法。...方法 : 视图隐藏 或 关闭后, 回调该方法; -- viewWillLayoutSubviews 方法 : 视图将要排列其子视图, 需要回调的方法; -- viewDidLayoutSubviews...; -- 触发 IBAction 方法 : 界面中的 UIButton 点击, 就会回调 IBAction 方法; (2) IBAction 绑定步骤 IBAction 绑定步骤 :  -- 选中界面设计文件...; -- Event : 选择为什么样的事件绑定 IBAction 属性, 默认 Touch Up Inside 在 UI 控件区域并松开; -- Arguments : 选择 IBAction 方法形参列表...StoryBoard 与 xib 区别详解 (1) Scence 概念 Scene 场景简介 :  -- Scene 组成 : Scene 由 整个视图, 视图控制器, 第一响应者 组成; -- 场景与界面

4.9K30

Protocol与Delegate 使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里

1605429 本系列文章主要通过讲解KVC、KVO、Delegate、Notification的使用方法,来探讨KVO、Delegate、Notification的区别以及相关使用场景,本系列文章将分一几篇文章进行讲解...,类似于泛型的语法,在定义协议,支持required关键字标识遵守协议的类必须要实现的方法,而optional关键字标识遵守协议的类可选实现的方法。...接下来就叫介绍代理模式也称为委托模式delegate,代理模式顾名思义就是让其他类代理当前类来执行一些任务,实现方式就是要依托协议protocol,定义一系列的方法,如果某个对象想成为其的代理则需要去实现该协议的方法,需要给委托的对象传递信息或是想要从委托对象获取信息就可以调用相关的方法...接下来看一NextViewController.m文件代码: #define ScreenWidth [[UIScreen mainScreen] bounds].size.width #define...[self dismissViewControllerAnimated:YES completion:nil]; } @end 整个NextViewController的逻辑比较简单,在UI

1K90

视觉效果 -- iOS Core Animation 系列三

本片文章前三章内容大家比较常用,后面的可能会不那么常用,前面的基础内容不想看了可以直接从第4段开始 圆角 conrnerRadius 这个功能还是很常见的,本来不想记了,为了整个系列的完整性,还是啰嗦一...可以用过下面的示例看一。 在Storyboard中放置两个白色的view,每个view分别有两个子view(一个黄色,一个青色),而且都超出了父视图的边界: ?...通过上面的示例可以发现: 只设置cornerRadius,默认情况,只影响背景颜色,而不影响背景图片或者子图层。 如果想要截取这个视图的图片和子视图,需要设置masksToBounds为YES。...显示一个50%透明度的图层,图层的每个像素都会一半显示自己的颜色,另一半显示图层下面的颜色。这是正常的透明度的表现。...但是如果图层包含一个同样显示50%透明的子图层,你所看到的视图,50%来自子视图,25%来了图层本身的颜色,另外的25%则来自背景色。 如果想保持透明度一直。

1.1K30

2018 - iOS 面试题汇总一般面试题BAT面试题

强引用着 UIview , UIview 强引用着 UIbutton , IBoutlet 连线到控制器的. m 或者. h 中作为视图的属性用 weak 修饰就可以了, (觉得用 strong 修饰也可以但是没有必要...,因为他让开发人员自己来决定所要处理的tag,特别是开发人员只需要处理文档中所包含部分数据,SAX这种扩展能力得到了更好的体现。...不同的行的高度不一样,尽量缓存它们的高度值。 如果 Cell 展示的内容来自网络,确保用异步加载的方式来获取数据,并且缓存服务器的 response。...runloop是来管理线程的,线程的runloop开启后,线程会在执行完任务后进入休眠状态,有了任务就会被唤醒去执行任务。 runloop在第一次获取创建,在线程结束销毁。...讲 讲你的使 场景以及使 的注意事项 1.给扩展添加属性 2.替换系统方法的的实现 22.讲讲iOS事件响应链的原理 1、响应者链通常是由视图(UIView)构成的; 2、一个视图的下一个响应者是它视图控制器

6.4K30

小Q项目框架搭建及会动的Tabbar未完待续,持续更新中

,看一 Paste_Image.png 怎么改一好呢,也希望大家给一些建议 好了,我们进如主题,项目搭建部分 小Q项目搭建 一、设计模式 首先呢,小Q采用传统的MVC的设计模式,优点我们再来啰嗦一啊...: 1、多个视图可以对应一个模型。...MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护。 2、应用分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性。...3、控制层的概念也很有效,由于它把不同的模型和不同的视图组合在一起,完成不同的请求。因此,控制层可以说是包含了用户请求权限的概念。 4、MVC更符合软件工程化管理的精神。...) 2.用来包含一些全部的头文件(整个项目中都用得上的头文件) 3.能自动打开或者关闭日志输出功能 但是apple在Xcode 6中去掉了pch,为了一些琐碎的头文件引用,加快了 编译速度!

71040

动画分析步骤“三步曲”

上图为当前工程的Main.storyboard中图层结构,其中View Controller为整个工程的视图控制器,login为UIImageView登录背景图片。...第4行设置当前UIButton登录按钮的位置,按钮的x坐标设置在整个界面之外,因此当前Button按钮是不可见的。第5行为登录按钮添加一个淡绿色背景。第6行设置登录按钮Title内容。...4 UIView视图中常见动画的属性分析 我们在第2节和第3节主要依靠UIView的frame属性来实现登录按钮从左到右的进入效果。那么UIView的其他属性是不是也可以有类似的效果呢?...alpha为0,表明UIView已经隐藏,alpha为1UIView显示。结合这一特征可以通过修改alpha在动画开始、结束的值,实现UIView的淡入淡出效果。...小结 通过对本文的学习,相信大家基本上掌握了动画分析的基本步骤,在这里总结一动画实现的三个步骤: (1)设置视图的动画初始状态。 (2)添加视图的动画相应属性。 (3)设置视图的动画最终状态。

86710

《Motion Design for iOS》(三十二)

默认情况一个UIButton点击,iOS会自动暗化图片。 最后,我让按钮可被点击并且会调用我定义的一个方法。...让我们看看现在app的样子,地图的alpha值设为了0,所以它是不可见的。 好,现在我们将动画的所有主要部件都添加到界面上了,是时候在地图图标点击添加一些动画了。...首先,我们需要实现按钮点击调用的方法。这里是不含任何内容的方法看起来的样子。 - (void)didTapMapIcon:(id)sender { // 暂时没有任何内容!...} 它会在用户点击地图按钮调用,因为我们之前通过 -addTarget:action:forControlEvents:方法进行了设置。...在这个文件的顶部我添加了一个名为mapShowing的BOOL变量来管理我们是需要打开还是关闭地图视图。这个属性会放置在我们按钮方法的下面,而我们添加的其他属性是我们界面的主视图

44410

iOS 9人机界面指南(四):UI元素()- 腾讯ISUX

视图数量超过页面宽度可承载的氛围,点的大小和间距并不会因此变小(如果需要显示的点超过一定数量,系统会把它截断) 默认情况下不支持视图之间导航;你必须实现视图视图之间的导航并适当地更新页面控件状态...告知用户有多少打开的视图的需求比帮助用户选择特定的视图更重要,使用页面控件。...避免在文本中详细描述“该哪个按钮”而导致文本过长。理想情况,表意明确的警告文案和逻辑清晰的按钮文案已经足以让用户正确判断自己该哪个按钮了。...提示 一般来说,警告框出现的时候,Home键将会从该app里切回主屏幕,此时Home键的效果类似于取消按钮——当用户回到app中的时候,警告框将消失,操作也不会被执行。...并指定适当的样式(完整的样式列表,请参考 Modal Presentation Styles) 模态视图: 能占据整个屏幕,它也可能占据整个视图(parent view)的区域,或者是屏幕的一部分 包含完成当前任务所需的文字和控件

13.2K30

iOS架构设计:揭秘MVC, MVP, MVVM以及VIPER

Controller/Presenter/ViewModel  —  Model和View之间的中介,一般负责在用户操作View更新Model,以及Model变化时更新View。...在上图的情况,View是无状态的。一旦Model改变,Controller就会简单地渲染它。例如:网页完全加载后,一旦你链接,就导航到其他地方。...由于视图控制器与视图紧密耦合,因此很难测试——因为在编写视图控制器的代码,你必须模拟View的生命周期,从而使你的业务逻辑尽可能地与View层的代码分隔开来。...如果你仔细回忆一,View是和Controller紧密耦合的,但是MVP的中介Presenter并没有对ViewController的生命周期做任何改变,因此View可以很容易的模拟出来。...什么是LEGO 使用VIPER,你可能想像用乐高积木来搭建一个城堡,这个想法可能存在一些问题。也许,现在就应用VIPER架构还为时过早,考虑一些更为简单的模式反而会更好。

1.3K20

iOS 自定义分段控制器

最近做项目遇到一些问题,就是项目里原有分段控制器的适用范围有些局限,虽然网上也有很多分段控制器的demo,但自己写的,可控性和项目适用性自己能很明白,所以我专门封装这样一个分段控制器,解决不同场景的功能需求...首先,介绍一分段控制器,相信大家也都见过这样的场景 ?...//设置按钮下划线宽度 @property (nonatomic,assign) NSInteger indicatorWidth; //默认50,我们最好设置一...,一是标题按钮的创建,二是设置指示器的位置,三是配置多个内容的控制器视图,仔细看代码,逻辑其实也很简单明了 4.实现按钮点击事件和视图滑动事件 #pragma mark - 事件 -(void)btnClick...注:以上代码就是顺序来的所有代码,其中用到了一个UIView的扩展文件,可直接访问UIView的left、width等属性。布局也使用frame,大家能更清楚逻辑。

1.3K31

面试题型—iOS离屏渲染探索

因为要来回切换上下文; 3、数据由 Off-Screen Buffer 取出,再存入 Frame Buffer 也需要耗费时间,这样增加了掉帧的可能性; 4、 离屏缓冲区 存在空间限制,即屏幕像素的2.5倍,大于这一值便不会触发离屏渲染...我们想要是如右图所示的效果,设置圆角后包括子视图也进行圆角裁剪。 但是按照正常流程显示完黄色图层后,在渲染蓝色图层进行圆角设置(超出圆角裁剪,未超出则不需要裁剪),已经找不到黄色图层的数据。...XCode中设置一生效。...和 UIImageView为例: //1.按钮存在背景图片 UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom];...由此可见,设置圆角触发离屏渲染的条件是 contents 有子视图,并设置了 masksToBounds = YES 。这是一个与的关系,两者必须都满足。

96860

UIButton实现各种图文结合的效果以及原理

两个子视图;而有的人则不会用UIButton来实现图文结合的功能。...前面说的几个方法看起来有效,也确实会解决问题,但缺点是代码量会增加,而且必须同时管理UIButton, UIImageView, UILabel这三个整体,如果哪天产品还希望有一个按钮高亮或者阴影效果...答案是否定的,其实UIButton本身是可以支持各种图文结合的,既然UIButton上能同时显示图片和文字,那就可以肯定的说UIButton里面本身一定有一个UIImageView和UILabel8子视图...图片在上,文字在下,整体居中 这种布局图片和文字要求垂直居中后,新的图片的顶部位置应该等于(selfHeight - totalHeight)/2, 因此垂直需要偏移的值就是新的位置减去原来的位置...padding是调整布局整个按钮和图文的间隔。

2.8K10

Swift:静态工厂方法

无论是我们要根据APP的品牌设置样式的视图(View),还是要配置的视图控制器(View Controller),亦或是在测试中创建存根的值,我们经常发现需要将设置代码放在某个地方。...swift: 静态工厂方法 视图 Views 视图是我们在编写UI代码必须设置的最常见对象之一。...尤其是在使用子视图控制器,我们通常最终会得到一组视图控制器,它们只能在其中呈现特定状态,而不是在其中包含大量逻辑。对于那些视图控制器,将其设置移动到静态工厂API可能是一个很好的解决方案。...在这种情况,“自动版式”的声明性确实很方便——我们可以预先指定所有约束,而不必重写任何方法或响应任何调用。 就像用于视图一样,工厂方法为我们提供了非常干净的调用方式。...不使用该新功能,也可以添加@discardableResult来删除所有警告。 测试存根 Test stubs 不仅需要在主应用程序代码中执行很多设置,而且在编写测试还经常需要这样做。

2.4K10

iOS开发·runtime原理与实践: 关联对象篇(Associated Object)(应用场景:为分类添加“属性”,为UI控件关联事件Block体,为了不重复获得某种数据)

当用户按钮关闭该视图,需要用委托协议(delegate protocol)来处理此动作,但是,要想设置好这个委托机制,就得把创建警告视图和处理按钮动作的代码分开。...创建完警告视图之后,设定一个与之关联的“块”(block),等到执行delegate方法再将其读出来。下面对此方案进行改进。...3.2 UIButton 除了上述的UIAlertView,这节以UIButton为例,使用关联对象完成一个功能函数:为UIButton增加一个分类,定义一个方法,使用block去实现button的点击回调...typedef void(^ButtonClickCallBack)(UIButton *button); @interface UIButton (Handle) // 为UIButton增加的回调方法...+Handle.h" // 声明一个静态的索引key,用于获取关联对象的值 static char *buttonClickKey; @implementation UIButton (Handle

2.6K20
领券