zoukankan      html  css  js  c++  java
  • [Swift通天遁地]九、拔剑吧-(8)创建气泡式页面切换效果

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10357329.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[Swift]通天遁地Swift

    本文将演示使用第三方类库,创建页面之间的气泡式切换效果。

    首先确保已经安装了所需的第三方类库。双击查看安装配置文件【Podfile】

    1 platform :ios, '12.0'
    2 use_frameworks!
    3 
    4 target 'DemoApp' do
    5     source 'https://github.com/CocoaPods/Specs.git'
    6     pod 'BubbleTransition'
    7 end

    根据配置文件中的相关设置,安装第三方类库。

    安装完成之后,双击打开项目文件【DemoApp.xcodeproj】

    首先创建一个自定义的视图控制器,以实现两个页面之间的跳转。

    在项目文件夹上点击鼠标右键,弹出右键菜单。

    【New File->【Cocoa Touch->【Next】->

    【Class】:AnimationController

    【Subclass of:UIViewController

    【Language】:Swift

    ->Next->【Create】

    点击打开【AnimationController.swift】,

    现在开始编写代码,创建视图控制器的界面。

     1 import UIKit
     2 
     3 class AnimationController: UIViewController {
     4 
     5     override func viewDidLoad() {
     6         super.viewDidLoad()
     7         // Do any additional setup after loading the view, typically from a nib.
     8         
     9         //添加一个按钮,当按钮点击该按钮时,关闭被打开的视图控制器。
    10         let button = UIButton(frame: CGRect(x: 130, y: 80,  60, height: 60))
    11         //设置按钮的背景颜色为白色
    12         button.backgroundColor = UIColor.white
    13         //通过将圆角半径设置为尺寸的一半,从而创建一个圆形按钮。
    14         button.layer.cornerRadius = 30
    15         //设置按钮在正常状态下的前景文字。
    16         button.setTitleColor(UIColor.orange, for:.normal)
    17         //设置按钮在正常状态下的标题文字。
    18         button.setTitle("X", for: .normal)
    19         //设置按钮标题的字体属性。
    20         button.titleLabel?.font = UIFont(name: "Arial", size: 28)
    21         //给按钮控件绑定点击事件。
    22         button.addTarget(self, action: #selector(AnimationController.dismissViewController(_:)), for: .touchUpInside)
    23         
    24         //将按钮控件添加到根视图
    25         self.view.addSubview(button)
    26     }
    27     
    28     //添加一个方法,用来响应按钮的点击事件。
    29     @objc func dismissViewController(_ btn:UIButton)
    30     {
    31         //当用户点击该按钮时,关闭当前的视图控制器。
    32         self.dismiss(animated: true, completion: nil)
    33     }
    34     
    35     override func didReceiveMemoryWarning() {
    36         super.didReceiveMemoryWarning()
    37         // Dispose of any resources that can be recreated.
    38     }
    39 }

    在左侧的项目导航区,打开视图控制器的代码文件【ViewController.swift】

    现在开始编写代码,实现气泡式的页面切换效果。

     1 import UIKit
     2 //引入已经安装的第三方类库
     3 import BubbleTransition
     4 
     5 //使当前的类,遵循视图控制器的页面切换代理协议。
     6 class ViewController: UIViewController, UIViewControllerTransitioningDelegate {
     7 
     8     //添加一个按钮,作为当前类的一个属性。
     9     //当用户点击该按钮时,以气泡方式打开另一个视图控制器。
    10     var button : UIButton!
    11     //初始化一个气泡切换对象。
    12     var transition = BubbleTransition()
    13     override func viewDidLoad() {
    14         super.viewDidLoad()
    15         // Do any additional setup after loading the view, typically from a nib.
    16         
    17         //对按钮进行初始化操作,设置按钮的显示区域。
    18         button = UIButton(frame: CGRect(x: 130, y: 400,  60, height: 60))
    19         //设置按钮的背景颜色为橙色。
    20         button.backgroundColor = UIColor.orange
    21         //设置按钮在正常状态下的标题文字。
    22         button.setTitle("Open", for: .normal)
    23         //通过将圆角半径设置为尺寸的一半,从而创建另一个圆形按钮。
    24         button.layer.cornerRadius = 30
    25         
    26         //给按钮绑定点击事件
    27         button.addTarget(self, action: #selector(ViewController.popViewController(_:)), for: .touchUpInside)
    28         //最后将按钮添加到根视图。
    29         self.view.addSubview(button)
    30     }
    31     
    32     //添加一个方法,用来响应按钮的点击事件。
    33     @objc func popViewController(_ btn:UIButton)
    34     {
    35         //初始化刚刚创建的视图控制器。
    36         let vc = AnimationController()
    37         //设置该视图控制器的切换代理 ,为当前的视图控制器。
    38         vc.transitioningDelegate = self
    39         //设置视图控制器的切换方式为自定义
    40         vc.modalPresentationStyle = .custom
    41         //在当前的视图控制器,打开另一个视图控制器。
    42         self.present(vc, animated: true, completion: nil)
    43     }
    44     
    45     //添加一个代理方法,用来监听视图控制器被打开的事件。
    46     public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning?
    47     {
    48         //设置视图控制器的切换模式为展示模式。
    49         transition.transitionMode = .present
    50         //设置气泡的起点位置,为按钮的中心点
    51         transition.startingPoint = button.center
    52         //设置气泡的填充颜色为按钮的背景颜色
    53         transition.bubbleColor = button.backgroundColor!
    54         
    55         //返回设置好的切换对象。
    56         return transition
    57     }
    58     
    59     //添加一个方法,用来监听视图控制器被关闭的事件。
    60     public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?
    61     {
    62         //设置视图控制器的切换模式为消失模式
    63         transition.transitionMode = .dismiss
    64         //设置消失气泡的起点位置,为按钮控件的中心点。
    65         transition.startingPoint = button.center
    66         //设置气泡的填充颜色,为按钮控件的背景颜色。
    67         transition.bubbleColor = button.backgroundColor!
    68         
    69         //返回设置好的切换工作
    70         return transition
    71     }
    72     
    73     override func didReceiveMemoryWarning() {
    74         super.didReceiveMemoryWarning()
    75         // Dispose of any resources that can be recreated.
    76     }
    77 }

  • 相关阅读:
    随笔列表--目录还没有时间来得及更改......
    [Redis] 万字长文带你总结Redis,助你面试升级打怪
    [Java] 多线程基础详细总结,附加详细实例
    这次,我是如何监控服务器CPU和内存的
    [Java][Web] Servlet中转发和重定向比较
    [Maven] Project build error: 'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as packaging.
    [JAVA][Liferay] Configure sharding in multiple sites
    [JAVA][Liferay] Duplicate key value violates unique constraint for resourcepermissionid in Liferay
    [Java][Liferay] 模拟用户
    [Java][Liferay] 如何从Javascript的function中获取language property的值
  • 原文地址:https://www.cnblogs.com/strengthen/p/10357329.html
Copyright © 2011-2022 走看看