内容简介:关于使用面向协议来封装功能的实战可以参考我上篇文章如果对面向协议有疑问的同学可以看下我之前的两篇文章
关于使用面向协议来封装功能的实战可以参考我上篇文章 【iOS 面向协议方式封装空白页功能】 ,这里就不再赘述,直接进入使用阶段吧
如果对面向协议有疑问的同学可以看下我之前的两篇文章
开源库
| Name | Link |
|---|---|
| GitHub | LXFProtocolTool |
| Wiki | Wiki首页 |
| 本文 Demo | LXFFullScreenable |
使用Cocoapods的方式来安装即可
pod 'LXFProtocolTool/FullScreenable' 复制代码
一、配置
AppDelegate
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if UIApplication.shared.lxf.allowRotation { // 可旋转屏幕时所支持的方向
return UIInterfaceOrientationMask.landscape
}
return .portrait
}
复制代码
二、使用案例
方法与属性的调用都需要命名空间加上 lxf ,如 isFullScreen -> lxf.isFullScreen
isFullScreen : 获取当前遵守协议者是否为全屏状态 复制代码
func switchFullScreen(
isEnter: Bool? = nil,
specifiedView: UIView? = nil,
superView: UIView? = nil,
config: FullScreenableConfig? = nil,
completed: ((_ isFullScreen: Bool)->Void)? = nil
)
复制代码
| Name | Type | Desc |
|---|---|---|
| isEnter | Bool? |
是否进入全屏 |
| specifiedView | UIView? |
指定即将全屏的视图 |
| superView | UIView? |
作为退出全屏后specifiedView的父视图 |
| config | FullScreenableConfig? |
配置 |
| completed | ((_ isFullScreen: Bool)->Void)? |
进入/退出 全屏后的回调 |
当 switchFullScreen 的调用者为 UIView 时,如果 specifiedView 为 nil 会自动填写, superView 也是如此
switchFullScreen 方法不推荐直接使用,不过当遵守协议者为 UIViewController 时,可以通过使用默认参数来切换屏幕方向 lxf.switchFullScreen()
以下分两种情况说明
UIViewController
func enterFullScreen(
specifiedView: UIView,
config: FullScreenableConfig? = nil,
completed: FullScreenableCompleteType? = nil
)
复制代码
func exitFullScreen(
superView: UIView,
config: FullScreenableConfig? = nil,
completed: FullScreenableCompleteType? = nil
)
复制代码
以上两个方法是对 switchFullScreen 的抽离,使调用时对参数的传递更加清晰
1、遵守协议 FullScreenable
class LXFFullScreenableController: UIViewController, FullScreenable { }
复制代码
2、指定视图进入全屏
lxf.enterFullScreen(specifiedView: cyanView) 复制代码
3、指定视图退出全屏,并添加到当前控制器的 view 上
lxf.exitFullScreen(superView: self.view) 复制代码
UIView
func enterFullScreen(
specifiedView: UIView? = nil,
config: FullScreenableConfig? = nil,
completed: FullScreenableCompleteType? = nil
)
复制代码
func exitFullScreen(
superView: UIView? = nil,
config: FullScreenableConfig? = nil,
completed: FullScreenableCompleteType? = nil
)
复制代码
以上两个方法是对 switchFullScreen 的抽离,使调用时对参数的传递更加清晰
1、遵守协议 FullScreenable
class LXFFullScreenView: UIButton, FullScreenable { }
复制代码
let cyanView = LXFFullScreenView() 复制代码
2、进入全屏
cyanView.lxf.enterFullScreen() 复制代码
3、退出全屏
cyanView.lxf.exitFullScreen() 复制代码
这里是对遵守了 FullScreenable 协议的视图进入全屏切换,由于代码内部已经经过自动视图填写,所以直接调用相应的方法即可,当然也可以自己指定 specifiedView 和 superView
三、FullScreenableConfig说明
上述的方法都有一个 config 参数,默认为nil,即为默认配置
相关属性说明
| Name | Type | Desc | Default |
|---|---|---|---|
| animateDuration | Double |
进入/退出 全屏时的旋转动画时间 | 0.25 |
| enterFullScreenOrientation | UIInterfaceOrientation |
进入全屏时的初始方向 | landscapeRight |
这里我们把动画时间设置为 1s ,初始方向为 左 后来看看效果
FullScreenableConfig(
animateDuration: 1,
enterFullScreenOrientation : .landscapeLeft
)
复制代码
cyanView.lxf.enterFullScreen(config: diyConfig) cyanView.lxf.exitFullScreen(config: diyConfig) 复制代码
结语
到这里相关的说明已罗列完毕,有什么不清楚的可以下载 Demo 看看,或者在文章下方留言提问
LXFProtocolTool 主要是通过协议的方式来方便快捷地实现一些的实用功能,除了本文提及的全屏旋转功能外还有其它实用功能的封装,具体内容可以到 Wiki首页 查找。如果你有什么想实现的功能也可以提出来,喜欢的就给个Star鼓励下我吧 :rocket: :rocket: :rocket:,感谢支持!
以上所述就是小编给大家介绍的《iOS 面向协议封装全屏旋转功能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Twitter Power
Joel Comm / Wiley / 2009-02-17 / USD 24.95
"Arguably, one of the best tomes...Twitter Power is jam-packed with clever ways to start and dominate a marketplace." (Brandopia.typepad.com, March 23rd 2009) “For months I......一起来看看 《Twitter Power》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
XML、JSON 在线转换
在线XML、JSON转换工具