求解swift 怎么在线程中更新主界面UI

求解swift 怎么在线程中更新主界面UI,第1张

.Net1.1时允许非UI的线程访问UI控件,.Net2.0开始不允许了。所以程序员首先要检测Control的InvokeRequired属性,

如果为true,就说明是非UI线程访问了这个控件,于是就需要调用这两个方法之一,将 *** 作UI的函数封装到UI线程上去执行。其中Invoke是阻塞

的,BeginInvoke是异步的。

2)利用同步上下文调度器

.Net4.0增加了一个线程 *** 作的类Task。Task的Start方法或ContinueWith方法中可以指定一

个任务调度器TaskScheduler,如果这个任务调度器是同步上下文调度器,那么在Task的方法中就可以访问UI控件。要得到一个同步上下文调度

器,需要通过TaskScheduler的静态方法FromCurrentSynchronizationContext。

3)利用同步上下文SynchronizationContext

这个类很重要,利用这个类可以大大简化我们的异步更新UI界面的代码。避免了和

线程间的无尽纠缠。利用SynchronizationContext的Current可以得到当前线程的同步上下文。注意,如果你在非UI线程上调用,

会得到null。所以我们需要在UI线程上首先得到它的一个引用。然后在任务线程里就可以用这个引用变量。利用它的Send或Post方法将我们的更新

UI的函数封送到UI线程上执行。对于WinForm程序来说Current返回的是

WindowsFormsSynchronizationContext,它是SynchronizationContext的一个子类。Send或

Post方法内部其实还是使用的Control.Invoke或Control.BeginInvoke来实现的。

首先来分析一下界面的交互:

在viewDidLoad中创建collectionView,并获取根据albumItem获取图片资源,保存到pictures,pictures就是collectionView的数据源

设置cell 的内容, 显示的是小图,并且获取大图保存起来(点击缩略图时显示大图,所以就一并获取)。

勾选、取消勾选的时候添加、移除蒙版,蒙版要添加在勾选按钮下面,这样才不会影响勾选按钮的点击响应。

需要以下设置,按钮才能根据自身的状态更改图片

判断已经勾选的数量是否大于maxCount。无论有没有超出maxCount,cell都会默认先勾选了。如果已经超出范围时,需要取消勾选。

如果是没有超出maxCount的勾选,则将图片添加到已选数组。如果是取消勾选,则在已选数组中移除。

想要访问相册,首先的获得系统的授权。在app的配置文件info.plist中添加一下项:(添加相册项即可)

然后获取相册授权状态,如果你的app没有进行过授权的话,是授权状态一般是.notDetermined,此时需要请求授权。

将跳转到Picker的方法封装在PickerHelper中,然后用户就可以调用这个方法直接使用Pikcer

用户调用Picker

准备

1

打开此系统之前我们创建的「PersonalAccounts」应用,并切换到「Main.storyboard」文件。

2

切换到主面板,并关闭左侧项目树

3

删除之前拖入的Label

4

打开之前你已经做好的设计样稿

END

绘制界面

首先,我们先画第一个界面,通过观察设计样稿知道,这个界面需要的控件有Label、Button、Image View、Table View。

根据设计样稿,我们将对应的控件从「对象仓库」中拖入对应的控件,并摆放到相应的位置中。

ps:Image View用于绘制设计样稿中的那个矩形框。Table View用于呈现明细列表。

从「对象仓库」中拖入3个「View Controller」用于绘制其他设计样稿中的界面。

分别绘制相应的界面。

ps:为了简单起见,在录入具体金额时,使用系统自带的键盘。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11653609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存