
iOS UI层
文章平均质量分 64
hherima
移动互联网,大有可为!APP开发经历:飞信、和4G、搜狐视频、56视频等项目。
展开
-
横屏页面present一个竖屏VC
iOS转屏一些忽视的问题。原创 2022-10-02 22:54:13 · 728 阅读 · 1 评论 -
[经验]tableview的contentSize默默自己在变。
项目中遇到一个诡异的问题:tableview的contentSize在滚动的时候自动在变小。这里先说一下项目环境:UIViewController有个tableview,可以通过上拉加载,实现加载更多数据。在一日测试中发现,一直上拉,上拉到第三页的时候。页面反而滚动到了顶部惊讶。上拉加载更多,结果应该是tableview显示底部数据,contentoffset应该是一个比较大的值。现在却弹回去了。看看输出日志原创 2017-05-15 19:02:51 · 4442 阅读 · 0 评论 -
[算法]iOS 视频添加水印,合成视频两种方案(整体渲染和分割渲染)
现手机里有一段视频,通过APP给他添加一个水印。iOS提供了在视频上添加layer的接口,添加一个水印还是很方便的(添加水印)。添加完水印有一个渲染过程,在手机这种设备上还是比较慢的,比如:对1分钟的高清视频(960x540)进行渲染需要20秒左右。如何在现有API基础上提高渲染速度,提升用户体验,成了问题。笔者发现两种渲染方法: 先看图,这有一个6秒的视频,我抓了四张关键帧。只在第2,3两张关键帧上添加字幕(一个关键帧代表1.5秒。所以,两个关键帧就代表是3秒时长)原创 2017-05-25 14:49:40 · 6540 阅读 · 1 评论 -
[技巧]UIView的hidden和alpha的妙用
现状:暂停和loading都是通过hidden来实现显示和隐藏的。这两个的显示有各自的逻辑。暂停按钮显示5秒消失。loading图根据网络状况出现,消失。解决原则是:loading视图要比暂停优先级高,即loading会踢走暂停按钮,loading消失,暂停还需要出现(如果有的话)。那么,既然无法控制hidden,我们可以利用另外一个属性alpha。这样即便alpha=1,也不影响视图的显示结果。写一个伪代码:原创 2017-07-13 12:17:15 · 4061 阅读 · 0 评论 -
[经验]iOS app整体是竖屏(横屏),某个页面却支持横竖屏
一个app 整体上是横屏,即info.plist中设置如下图。但是在某个页面需要支持横屏。通常在进入那个页面的时候会crash。2016-08-30 17:38:30.224 Video[991:372909] *** Terminating app due to uncaught exception 'UIApplicationInvalidInterfaceOrientation', re...原创 2016-08-30 18:02:36 · 6673 阅读 · 1 评论 -
cell 上下非对称margin新方式
UI设计师总是会设计出一些完美的视觉,但有些完美视觉效果需要特别的处理。前两年总听到一句话:一个漂亮的界面背后总是有一堆肮脏的代码。 先看一个有问题的效果。小图cell和大图cell之间的margin是12.5p,而两个小图cell之间的margin是25p.这是因为。cell的contentView在cell中是居中的,上下margin都是12.5。最终是这个效果:原创 2017-08-31 20:05:42 · 1105 阅读 · 0 评论 -
guideImageView.frame = videoPlayerVC.videoPlayerView.bounds;竟然frame不一样
结果guideImageView.frame和videoPlayerVC.videoPlayerView.的frame竟然不一样。这么一句赋值,竟然等号左边的不一样。颠倒了90°。查了资料后发现原来是view2有个transform啊。原创 2017-09-30 11:46:49 · 770 阅读 · 0 评论 -
masonry实现不规则图片布局【图】
直接上代码,思路是:将那一推图片分为四列,每一列是上下对齐的,不要使用按钮。UIImageView+UILabel即可原创 2017-11-01 11:40:56 · 2023 阅读 · 2 评论 -
iOS APP在前台收到push,弹出系统框
在iOS9以前,APP前台可以收到push的数据,但是没有UI展示,需要APP自己展示。iOS 10以后,苹果统一使用UserNotifications ,以前的API都被标为弃用了。在appdelegate 中添加代理和代理方法。#import <UserNotifications/UserNotifications.h>- (BOOL)applicati...原创 2019-06-21 13:09:19 · 4402 阅读 · 0 评论 -
UICollectionView 刷新后空白,cell的hidden全是yes自己隐藏了。
网上也有同学遇到此类问题。我这边出现空白的原因是:本来collectionview的contentSize比frame小。中间手动将其contenSize改为和frame一样大。为了能够上下滑动(当时不知道有一个属性self.collectionView.alwaysBounceVertical = yes可以支持垂直方向滑动原创 2019-08-28 11:13:22 · 3042 阅读 · 0 评论 -
scrollRectToVisible 无效的两个原因
除了UIScrollView的ContentSize的width或者height是0的原因外,可能还有一个原因就是UITableview的contentInset是负值,比如:self.tableView.contentInset = UIEdgeInsetsMake(-5, 0, 0, 0);删除这个contentInset或者inset是正值,滚动到顶部都可以生效原创 2017-05-05 11:49:45 · 3951 阅读 · 0 评论 -
iOS返璞归真,译文系列——UIViewController
UIViewController懒加载他的view。第一次访问视图属性加载或创建视图控制器的视图。不是所有的“will”回调方法都只与“did”回调方法配对翻译 2017-03-16 15:19:20 · 1970 阅读 · 0 评论 -
把UIColor(纯色值)对象转化成UIImage对象
把UIColor(纯色值)对象转化成UIImage对象原创 2015-03-12 10:36:39 · 2626 阅读 · 0 评论 -
tableview小结
初学者的问题主要集中在,下面几个问题:一、几个函数总是不被调用:例如:- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;这个代理不被调用的种类很多:1. section的count没有正确2. 没有设置代理3.如果没有设置seciton的高度,仍然原创 2014-10-27 13:25:21 · 2280 阅读 · 0 评论 -
探究contentOffset和contentInset,并解决上拉加载更多,uitableview抖动问题
从loading开始,加载更多后,“悄巴蜀”这个cell出来了,但是tableview先向下滑动,在向上滑动,产生了抖动现象。【原因】当loading的时候,contentInset.bottom是172,当loading隐藏的时候contentInset.bottom = 56.这是因为在对tableview的contentInset赋值的时候,contentOffset也会相应改变。contentOffset的变化导致了抖动。下面的log展示了,contentInset和contentOffset相原创 2015-04-02 01:04:15 · 20878 阅读 · 0 评论 -
使网页适应UIWebView的宽度
使网页适应UIWebView的宽度比较简单的做法是:在- (void)webViewDidFinishLoad:这个方法中,修改JavaScript的值:原创 2015-08-12 18:23:26 · 1577 阅读 · 0 评论 -
【技巧】UITableView 在UITableViewStylePlain模型下,取消headerView的黏结性,不浮动
UITableView使用UITableViewStylePlain样式时,section的header与footer会在滚动过程中固定在顶部,这个交互很不错。如果要阻止这个交互,那么办法有四个: 那么如果section中的cell为空,它是不会浮动的;基于这个原理,可以巧妙的将header单独拎出来。如图2:试想分拆后的每一个section,只有第一个带有header,且不会浮动。为了扩展性,将footer也算进去。将原始的section数量乘以3,得到header的section,cel原创 2016-04-01 10:36:46 · 6501 阅读 · 0 评论 -
【技巧】多行label AutoLayout 自适应高度。
多行label 高度自适应转载 2017-03-15 18:00:15 · 3406 阅读 · 0 评论 -
iOS返璞归真,译文系列——UIScreen
UIScreen一个uiscreen对象定义了一个基于硬件的显示相关的属性。iOS设备的主屏幕和零个或多个连接的屏幕。一个TVOS装置具有电视连接到设备的主屏幕。使用此类获取连接到设备的每个显示器的屏幕对象。每个屏幕对象定义关联显示的边界矩形和其他有趣的属性,如它的亮度。概要 在iOS 8之前,屏幕的边界矩形总是反映相对于肖像定位屏幕尺寸。旋转设备的景观或倒置的方向并没有改变边界。在翻译 2017-03-16 15:18:33 · 1057 阅读 · 0 评论 -
iOS返璞归真,译文系列——UIView
UIView UIView 是定义了屏幕上一块矩形区域,并管理着这块区域上内容的UI界面。概要 在运行时,view对象处理矩形区域上所有内容的渲染,并处理交互。UIView类本身提供了基本的填充背景色的能力。更复杂的view可以通过集成UIView或者实现一些必要的drawing方法和event-handing代码。UIKit架构也提供了一系列标准UIView的派生类,翻译 2017-03-16 15:17:40 · 1359 阅读 · 0 评论 -
iOS返璞归真,译文系列——UIWindow
UIWindow UIWindow对象提供app界面的背景,和重要的事件响应交互。Windows本身没有任何可视的表现,但它对view的呈现起着关键作用。每一个view显示在屏幕上,其实是附在一个window上,每个window与应用程序中的其他window无关。应用程序收到的事件,最初被转发到相应的window对象上,然后将这些事件转发到相应的view中。Windows与view翻译 2017-03-16 15:18:04 · 1337 阅读 · 0 评论 -
隐藏导航条底部的黑线(shadowImage)四种办法
隐藏导航条底部的黑线(shadowImage)的四种办法原创 2015-03-12 10:57:30 · 13778 阅读 · 3 评论