ios 中请求主线程刷新UI

 1 if ([NSThread isMainThread])
 2 {
 3     [self.downloadMapBtn setImage:[UIImage imageNamed:@"download_map.png"] forState:UIControlStateNormal];
 4     [self.downloadMapBtn setNeedsDisplay];
 5 }
 6 else
 7 {
 8     dispatch_sync(dispatch_get_main_queue(), ^{
 9         //Update UI in UI thread here
10         [self.downloadMapBtn setImage:[UIImage imageNamed:@"download_map.png"] forState:UIControlStateNormal];
11         [self.downloadMapBtn setNeedsDisplay];
14     });
15 }
时间: 2024-11-08 10:44:38

ios 中请求主线程刷新UI的相关文章

开子线程下载图片,回到主线程刷新UI步骤

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [NSThread detachNewThreadSelector:@selector(download) toTarget:self withObject:nil]; } #pragma mark ---------------------- #pragma Methods //开子线程下载图片,回到主线程刷新UI -(void)downl

后台打印:This application is modifying the autolayout engin from a background thread,which can lead to engine corruption and weird crashes可能是因为没有在主线程刷新UI

后台打印:This application is modifying the autolayout engin from a background thread,which can lead to engine corruption and weird crashes可能是因为没有在主线程刷新UI

2. GCD的使用(线程间通信---子线程执行耗时操作/主线程更新UI)

// // ViewController.m // 07-线程间通信(加载图片,在主线程中更新UI) // // Created by Jasperay on 15/9/3. // Copyright (c) 2015年 @aLonelyRoot3. All rights reserved. // #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UI

Android之Handler用法总结/安卓中只有主线程可以修改UI

Handler传递消息的方式可以实现实时刷新以及长按连续响应事件. 按钮响应 1 btnadd_fcl.setOnTouchListener(new View.OnTouchListener() { 2 private boolean longclick=false; 3 @Override 4 public boolean onTouch(final View v, MotionEvent event) { 5 // TODO Auto-generated method stub 6 if(e

Android新线程中更新主线程中的UI控件

Android中的View都不是线程安全的,所以如果在某一个新线程中直接更新主线程中的UI控件时就会报如下错误: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 为了解决在另一个线程中更新UI控件的问题,我们可以使用如下几种解决方案: 1. 自己写Handler解决,参见<And

Android AsyncTask使用心得及错误处理-只能在主线程改变UI组件

大家肯定都会经常使用AsyncTask这个类,特别是在网络处理中,先看改正后的代码:这是正常的代码: class sendKeyTask extends AsyncTask<String, Void, Integer> { @Override protected void onPostExecute(Integer resultCode) { // TODO Auto-generated method stub super.onPostExecute(resultCode); switch (

关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。

( 转载请务必标明出处:http://www.cnblogs.com/linguanh/, 本文出自:[林冠宏(指尖下的幽灵)的博客]) 前序 本文将会把一下三个问题阐述清楚以及一个网上的普遍观点的补充: 1,安卓 APP 启动过程,对于Activity 的 onCreate 等生命周期的函数为什么不会因为 Looper.loop()里的死循环卡死而永无机会执行. 2,在 1 的基础上,View 的绘制到底是怎样完成的,它又为什么不会因为 Looper.loop()里的死循环卡死而永无机会刷新.

在子线程中更改主线程中的控件的信息,在子线程中用toast

一丶在子线程中不允许更改主线程中的控件的信息,也不允许在子线程中用toast,我们要更改的话 (1)消息机制:使用handler (由主线程调用) 在主程序中Handler handler = new Handler(){ public void handleMessage(Message msg){ int type = msg.what ;//拿到msg的类型,再判断            switch (type) {                case SUCCESS:      

Android在线程中发送GET和POST请求 在主线程更新UI

public class GetPostUtil { /** * 向指定URL发送GET方法的请求 * * @param url * 发送请求的URL * @param params * 请求参数,请求参数应该是name1=value1&name2=value2的形式. * @return URL所代表远程资源的响应 */ public static String sendGet(String url, String params) { String result = "";