iOS出现按钮文字等的叠加问题

概述

iOS开发中遇到了这样的问题:拿点赞按钮为例,点赞后,按钮变红,点赞前按钮为绿色。点赞使按钮变红后,点击home键把程序退都后台,一段时间在返回前台时,点赞按钮中间红,边缘绿。

这个问题很怪,测试的时候不是一定发生,感觉退出到后台3分钟大多能够发生。一直困扰我们很久。

原因

后来发现,复现的步骤不是推到后台3分钟,我们发现的必现步骤是,推到后台后,不断的打开很多其他的app。发现这个复现步骤不是我们进行了多少的测试,而是源自一篇简书上的文章,原文地址http://www.jianshu.com/p/174fd2673897

是哪里给的我们灵感呢?

给我们灵感的是iOS 应用程序5个状态:

停止运行-应用程序已经终止,或者还未启动。

不活动-应用程序处于前台但不再接收事件(例如,用户在app处于活动时锁住了设备)。

活动-app处于“使用中”的状态。

后台-app不再屏幕上显示,但它仍然执行代码。

挂起-app仍然驻留内存但不再执行代码。

按下Home键时,app从活动状态转入后台,绝大部分app通常在几秒内就从后台变成了挂起。

在内存吃紧的时候,iphone会首先关闭那些挂起的app。

从 iOS 4 开始,应用就可以在退到后台后,继续运行一小段时间(10 分钟);

解惑

怎么说灵感来自ios程序的5个状态呢?其中关键的一句是,关于挂起状态的。

在内存吃紧的时候,iphone会首先关闭那些挂起的app。

我们想,有可能是内存吃紧,导致部分内容被回收,从而间接导致view重绘,但是重绘中没有依据按钮的当前颜色绘制,而是默认绘制成了初始颜色。

估计问题在ViewDidLoad。当然后来返现,问题的根源在于View中的点赞按钮这个栏内部绘制时使用的是DrawRect回调,该方法在上述情况下,再次进入app,又被调用了一次。

解决方法

解决方法就是不适用DrawRect而是使用initWithFrame替代。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值