美文网首页
iOS 小知识7

iOS 小知识7

作者: AppleTTT | 来源:发表于2018-05-23 15:51 被阅读37次

Photos type 记录

获取相册数据时,媒体类型以及子类型记录

PHAssetCollectionType
enum PHAssetCollectionType : Int {
    case Album  //从 iTunes 同步来的相册,以及用户在 Photos 中自己建立的相册
    case SmartAlbum //经由相机得来的相册
    case Moment //Photos 为我们自动生成的时间分组的相册
}
PHAssetCollectionSubtype
enum PHAssetCollectionSubtype : Int {
    case AlbumRegular //用户在 Photos 中创建的相册,也就是我所谓的逻辑相册
    case AlbumSyncedEvent //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步过来的事件。然而,在iTunes 12 以及iOS 9.0 beta4上,选用该类型没法获取同步的事件相册,而必须使用AlbumSyncedAlbum。
    case AlbumSyncedFaces //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步的人物相册。
    case AlbumSyncedAlbum //做了 AlbumSyncedEvent 应该做的事
    case AlbumImported //从相机或是外部存储导入的相册,完全没有这方面的使用经验,没法验证。
    case AlbumMyPhotoStream //用户的 iCloud 照片流
    case AlbumCloudShared //用户使用 iCloud 共享的相册
    case SmartAlbumGeneric //文档解释为非特殊类型的相册,主要包括从 iPhoto 同步过来的相册。由于本人的 iPhoto 已被 Photos 替代,无法验证。不过,在我的 iPad mini 上是无法获取的,而下面类型的相册,尽管没有包含照片或视频,但能够获取到。
    case SmartAlbumPanoramas //相机拍摄的全景照片
    case SmartAlbumVideos //相机拍摄的视频
    case SmartAlbumFavorites //收藏文件夹
    case SmartAlbumTimelapses //延时视频文件夹,同时也会出现在视频文件夹中
    case SmartAlbumAllHidden //包含隐藏照片或视频的文件夹
    case SmartAlbumRecentlyAdded //相机近期拍摄的照片或视频
    case SmartAlbumBursts //连拍模式拍摄的照片,在 iPad mini 上按住快门不放就可以了,但是照片依然没有存放在这个文件夹下,而是在相机相册里。
    case SmartAlbumSlomoVideos //Slomo 是 slow motion 的缩写,高速摄影慢动作解析,在该模式下,iOS 设备以120帧拍摄。不过我的 iPad mini 不支持,没法验证。
    case SmartAlbumUserLibrary //这个命名最神奇了,就是相机相册,所有相机拍摄的照片或视频都会出现在该相册中,而且使用其他应用保存的照片也会出现在这里。
    case Any //包含所有类型
PHCollectionListType
typedef NS_ENUM(NSInteger, PHCollectionListType) {
    PHCollectionListTypeMomentList    = 1, // 包含了PHAssetCollectionTypeMoment类型的资源集合的列表
    PHCollectionListTypeFolder        = 2, // 包含了PHAssetCollectionTypeAlbum类型或PHAssetCollectionTypeSmartAlbum类型的资源集合的列表
    PHCollectionListTypeSmartFolder   = 3, // 同步到设备的智能文件夹的列表
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
PHCollectionListSubtype
typedef NS_ENUM(NSInteger, PHCollectionListSubtype) {
    // PHCollectionListTypeMomentList的子类型
    PHCollectionListSubtypeMomentListCluster    = 1, // 时刻
    PHCollectionListSubtypeMomentListYear       = 2, // 年度
    // PHCollectionListTypeFolder的子类型
    PHCollectionListSubtypeRegularFolder        = 100, // 包含了其他文件夹或者相簿的文件夹
    // PHCollectionListTypeSmartFolder的子类型
    PHCollectionListSubtypeSmartFolderEvents    = 200, // 包含了一个或多个从iPhone同步的事件的智能文件夹
    PHCollectionListSubtypeSmartFolderFaces     = 201, // 包含了一个或多个从iPhone同步的面孔(人物)的智能文件夹
    // 如果你不关心子类型是什么,则使用下面这个
    PHCollectionListSubtypeAny = NSIntegerMax
} PHOTOS_ENUM_AVAILABLE_IOS_TVOS(8_0, 10_0);
PHCollectionEditOperation
typedef NS_ENUM(NSInteger, PHCollectionEditOperation) {
    PHCollectionEditOperationDeleteContent    = 1, // 删除集合中包含的内容,删除的东西会永久的从照片库中删除
    PHCollectionEditOperationRemoveContent    = 2, // 移除集合中包含的内容,但移除的东西不会从照片库中删除
    PHCollectionEditOperationAddContent       = 3, // 从其他的集合中添加内容
    PHCollectionEditOperationCreateContent    = 4, // 创建新的内容或者从其他的容器中复制内容到这个容器中
    PHCollectionEditOperationRearrangeContent = 5, // 改变内容的顺序
    PHCollectionEditOperationDelete           = 6, // 删除容器但不删除内容
    PHCollectionEditOperationRename           = 7, // 重命名容器的名字
} PHOTOS_AVAILABLE_IOS_TVOS(8_0, 10_0);
PHAssetCollectionType
enum PHAssetCollectionType : Int {
    case Album //从 iTunes 同步来的相册,以及用户在 Photos 中自己建立的相册
    case SmartAlbum //经由相机得来的相册
    case Moment //Photos 为我们自动生成的时间分组的相册
}
PHAssetCollectionSubtype
enum PHAssetCollectionSubtype : Int {
    case AlbumRegular //用户在 Photos 中创建的相册,也就是我所谓的逻辑相册
    case AlbumSyncedEvent //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步过来的事件。然而,在iTunes 12 以及iOS 9.0 beta4上,选用该类型没法获取同步的事件相册,而必须使用AlbumSyncedAlbum。
    case AlbumSyncedFaces //使用 iTunes 从 Photos 照片库或者 iPhoto 照片库同步的人物相册。
    case AlbumSyncedAlbum //做了 AlbumSyncedEvent 应该做的事
    case AlbumImported //从相机或是外部存储导入的相册,完全没有这方面的使用经验,没法验证。
    case AlbumMyPhotoStream //用户的 iCloud 照片流
    case AlbumCloudShared //用户使用 iCloud 共享的相册
    case SmartAlbumGeneric //文档解释为非特殊类型的相册,主要包括从 iPhoto 同步过来的相册。由于本人的 iPhoto 已被 Photos 替代,无法验证。不过,在我的 iPad mini 上是无法获取的,而下面类型的相册,尽管没有包含照片或视频,但能够获取到。
    case SmartAlbumPanoramas //相机拍摄的全景照片
    case SmartAlbumVideos //相机拍摄的视频
    case SmartAlbumFavorites //收藏文件夹
    case SmartAlbumTimelapses //延时视频文件夹,同时也会出现在视频文件夹中
    case SmartAlbumAllHidden //包含隐藏照片或视频的文件夹
    case SmartAlbumRecentlyAdded //相机近期拍摄的照片或视频
    case SmartAlbumBursts //连拍模式拍摄的照片,在 iPad mini 上按住快门不放就可以了,但是照片依然没有存放在这个文件夹下,而是在相机相册里。
    case SmartAlbumSlomoVideos //Slomo 是 slow motion 的缩写,高速摄影慢动作解析,在该模式下,iOS 设备以120帧拍摄。不过我的 iPad mini 不支持,没法验证。
    case SmartAlbumUserLibrary //这个命名最神奇了,就是相机相册,所有相机拍摄的照片或视频都会出现在该相册中,而且使用其他应用保存的照片也会出现在这里。
    case Any //包含所有类型
}
PHAssetBurstSelectionType 连拍属性

swift switch 中 case 呼不出来

记得 switch 的对象,一定要是解包的,最好加上 ! ,就可以呼出来了

图片浏览器中的图片显示的时候会有一个往下掉的动作

今天在看图片浏览器的时候,发现图片和视频都会在 iPhone X 上出现下掉的动画,很奇怪,

系统会有提示信息,但是不是崩溃的信息,如下:

he behavior of the UICollectionViewFlowLayout is not defined because:
the item width must be less than the width of the UICollectionView minus the section insets left and right values, minus the content insets left and right Example[16070:269647] The relevant UICollectionViewFlowLayout instance is , and it is attached to ; animations = { position=; bounds.origin=; bounds.size=; }; layer = ; contentOffset: {0, 0}; contentSize: {1024, 770}> collection view layout: .

只有在 iPhone X上出现了,解决办法也很奇葩,居然是注释掉这段代码

if #available(iOS 11.0, *) {
    let top = self.view.safeAreaInsets.top
    let bottom = self.view.safeAreaInsets.bottom
    collectionView.frame.size.height -= bottom
    collectionView.frame.origin.y = top
}

转场动画

https://github.com/seedante/iOS-Note/wiki/ViewController-Transition

minimumLineSpacing 的坑

今天在做自定义 MediaBrowser 的时候,排版一直排不好,因为我用了多个 Section,导致了一个问题就是 我设置了 flowLayoutminimumLineSpacing,这个参数只会在 同一个 Section 里面的时候,才会生效,在不同的 Section 之间的时候,是 没有这个 space 的,导致了两个 Section 连接的两张图是紧挨在一起的,找了半天才找到这个问题,我们需要给这个 CollectionView 设置 Section Header,并且要在代理方法里面设置,因为如果我们直接在 flowLayout 设置的话,第 0 个 Section 也会有空隙,这个是我们不需要的,因此需要在代理方法里面设置这个值,如下:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
    if section == 0 {
        return CGSize.zero
    }
    return CGSize.init(width: 30, height: view.bounds.size.height)
}

两个 collectionView 联动的时候,滑动的坑

我们在做一个图片或者视频浏览器的时候,都会碰到这样的情况,我们需要两个 CollectionView ,一个是 grid 显示的,一个是 preview 的;当我们在 preview 中滑动的时候,为了达到可以下滑返回到 grid 界面的目的(类似 Apple 相册或者是 WeChat 那样的效果),必须让我们在 preview 和 gird 界面显示同步,也就是 grid 界面显示的内容一定也是跟着 preview 界面显示的内容移动的,因此我们需要设置一个代理,在 preview 界面做如下操作:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let cell = collectionView.visibleCells.first
    let scrollIndexPath = collectionView.indexPath(for: cell!)!
    mediaBrowserDelegate?.mediaBrowser(self, didScrollAt: scrollIndexPath)
}

在 grid 界面实现代理方法:

func mediaBrowser(_ mediaBrowser: MediaBrowserViewController, didScrollAt indexPath: IndexPath) {
    collectionView.scrollToItem(at: indexPath, at: UICollectionViewScrollPosition.centeredVertically, animated: false)
}

相关文章

  • iOS 小知识7

    Photos type 记录 获取相册数据时,媒体类型以及子类型记录 PHAssetCollectionType ...

  • iOS 中捕获截屏操作

    转自:iOS知识小集 在iOS 7后,苹果提供了UIApplicationUserDidTakeScreensho...

  • 两年iOS经验之你忽略的小知识点

    两年iOS经验之你忽略的小知识点 两年iOS经验之你忽略的小知识点

  • ios-收集一些自认为有用的小知识

    ios-收集一些自认为有用的小知识 ios-收集一些自认为有用的小知识

  • iOS 知识-常用小技巧大杂烩

    iOS 知识-常用小技巧大杂烩 - 简书

  • iOS 小知识

    UILabel 通过文字计算宽高 UILable *lable=[UILable alloc]init]; lab...

  • iOS小知识

    刷榜 刷榜:指通过技术手段提高APP在iTunes App Store内排行榜的排名,包括iPhone免费排行榜;...

  • ios 小知识

    1.添加了IQKeyboardManager库之后,有些页面在收回键盘时会上移导致无法返回,检查代码后发现是进入页...

  • iOS 小知识

    调整tabbar文字位置 UIOffsetMake(0, -2)第一个参数是设置水平偏移,第二个参数是设置垂直偏移...

  • ios小知识

    1,常用网络框架默认网络请求超时时长 默认的网络请求超时时长 ASI 是10秒 苹果官方是60秒 SDWebIma...

网友评论

      本文标题:iOS 小知识7

      本文链接:https://www.haomeiwen.com/subject/ofwrjftx.html