如上图,是一个竖视频页面,可以上下滑动,当当前视频从屏幕中滑出的时候,需要将播放页面移除,并暂停播放
这里需要注意的是,偶尔的情况下,当前屏幕中的cell也会执行这个方法,所以这里需要添加一个判断,判断cell是否在屏幕中
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
这里是修复快速滑动的时候展示上一个播放画面的问题
在cell 滚出屏幕的时候将播放画面
移除,因为不将播放画面移除的话,在快速滚动的情况下,
刚刚滚动到一个cell的时候,会有一瞬间展示的上一个视频的播放画面
CGRect rect = [self.tableView convertRect:cell.frame toView:self.view];
CGRectEqualToRect(rect, self.view.bounds) ,发现偶发的情况会有当前正在展示的cell也会执行这个方法
导致将要开始播放的时候停止播放,这里添加一个判断cell 是否在屏幕中
if (self.currentIndex == indexPath.row && !CGRectEqualToRect(rect, self.view.bounds)) {
[self.player.currentPlayerManager.view removeFromSuperview];
[self.controlView pause];
self.currentIndex = -10;
需求如上图,是一个竖视频页面,可以上下滑动,当当前视频从屏幕中滑出的时候,需要将播放页面移除,并暂停播放代码这里需要注意的是,偶尔的情况下,当前屏幕中的cell也会执行这个方法,所以这里需要添加一个判断,判断cell是否在屏幕中- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
#pragma mark---tableview的cell,头部视图,尾部视图显示顺序
//cell将要显示
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"将要...
1、将cell的高度设置为屏幕高度,发现首次显示时连续调用了16个cell的- tableView:cellForRowAtIndexPath:,而每一次调用cellForRowAtIndexPath之后会接着调用- tableView:willDisplayCell:forRowAtIndexPath:,最后调用15次- tableView:didEndDisplayingCell:forRowAtIndexPath:表示除了第一个cell其余cell都移出屏幕。
2、将UITableView的estim
NSIndexPath * optionIndexPath;
scrollViewDidScroll 里判断
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (optionIndexPath != nil) {
//标记的cell 在tableView中的坐标值
先说一下刚开始的实现思路吧,一开始使用的Xib+AutoLayout,以及iOS8之后的自动估算高度。也就是设置
self.ableView.estimatedRowHeight = xxx;
self.tableView.rowHeight = UITableViewAutomaticDimension;
选择这种实现方式非常适合快速开发,快速的拖拽控件就可以很快的看见效果。
如果能这么顺利
UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似。简单来说,UICollectionView是比UITbleView更加强大的一个UI控件,有如下几个方面:
1、支持水平和垂直两种方向的布局
2、通过layout配置方式进行布局
3、类似于TableView中的cell特性外,C...
系统判断方法失效:
在你的项目中,当需要判断系统版本的话,不要使用下面的方法:
#define isiOS10 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=10)
它会永远返回NO,substringToIndex:1在iOS 10 会被检测成 iOS 1了,
应该使用下面的这些方法
轮播图可以用UIScrollView或UICollectionView来实现。
用UIScrollView实现轮播图的思路是:
给图片数组的第一个元素(下标0)添加最后一张图片,之后再往末尾添加第一张图片,这样数组就增加了2张图片,第一个元素和倒数第二个元素是最后一张图片,最后一个元素和第二个元素是第一张图片。
根据图片数组的个数创建UIImageView个数,每个UIImageView占据屏幕宽度。首次展示图片时,scrollView定位到(contentOffset)数组的第二个元素,展示第一张
今天在推特上看到一篇关于性能优化不错的文章,是前苹果开发人员写的,翻译了一下与大家分享,原地址iOS Performance tips you probably didn’t know (from an ex-Apple engineer)
作为开发人员,良好的性能对于使我们的用户感到惊喜和喜悦是无价的。iOS用户具有很高的标准,如果你的应用程序反应很慢或在内存压力下崩溃,他们将停止使用它,或者...
一、UICollectionView基础:
1.简介:
UICollectionView是iOS6之后引入的一个新的UI控件,在目前的iOS开发中,使用非常广泛。它和UITableView都继承自UIScrollView,但是它比UITableView更加强大,可以根据需要自定义各种各样复杂的布局。
它和UITableView十分相似,并且很多代理方法都十分类,具体的可以看看苹果官方的文档:UICollectionView - Apple Developer
2.特点:
(1)系统自带的流水布局支持水平和垂
iOS 获取屏幕刷新率可以通过Core Animation框架中的CADisplayLink类实现。CADisplayLink是一个定时器类,可以监听屏幕的刷新频率,并在每一帧结束时发送回调。
首先需要创建一个CADisplayLink对象,并添加到主运行循环中:
CADisplayLink *displayLink = [UIScreen mainScreen].maximumFramesPerSecond == 0 ?
[CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick:)] :
[UIScreen mainScreen].linkWithPreferredFramesPerSecond == 0 ?
[CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick:)] :
[UIScreen mainScreen].linkWithPreferredFramesPerSecond == 60 ?
[CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick60fps:)] :
[UIScreen mainScreen].linkWithPreferredFramesPerSecond == 120 ?
[CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick120fps:)] :
[UIScreen mainScreen].linkWithPreferredFramesPerSecond == 90 ?
[CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick90fps:)] : nil;
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
然后实现对应的回调方法,在每帧结束时获取屏幕的刷新率:
- (void)displayLinkTick:(CADisplayLink *)link {
CGFloat frameInterval = link.duration/60.0;
screenRefreshRate = (int)(1.0/frameInterval);
最后需要注意的是,在iOS 10之后,为了省电和减少GPU负担,屏幕刷新率可能会动态调整,因此获取到的屏幕刷新率并不一定是恒定的。
LibreSSL SSL_read: error:02FFF03C:system library:func(4095):Operation timed out, errno 60
10309
ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
iOS 使用陀螺仪实现裸眼3d效果