当前位置: 代码迷 >> .NET Framework >> 最老软件工程师创业开发实训7-Cocoa Touch Framework实现Splash屏幕功能
  详细解决方案

最老软件工程师创业开发实训7-Cocoa Touch Framework实现Splash屏幕功能

热度:217   发布时间:2016-05-01 23:21:30.0
最老程序员创业开发实训7---Cocoa Touch Framework实现Splash屏幕功能

在Xcode中建立好工程空间(Work Space)之后,并且建立Cocoa Touch Framework工程WkyLib和应用工程WkgJys工程,下面我们就可以开始进行正式开发了。

首先我们进入Cocoa Touch Framework工程WkyLib,先在下面创建如下组用于组织代码:common, model, view, controller,如下图所示:

WkyLib创建组

同时,在WkyLib的目录下,创建相同的目录common, model, view, controller, images:

添加辅助目录

在view目录下建立新文件,WKYAppSplashView.swift,这个文件是MVC中的视图类,采用Auto Layout技术,将指定的背景图作为UIImageView的图像源,代码如下所示:

import UIKitpublic class WKYAppSplashView{    public init(rootView: UIView, splashImageName: String? = nil) {        auxInt = 0        if let realName = splashImageName {            self.splashImageName = realName        } else {            self.splashImageName = "app_splash.jpg"        }        let splashImage = UIImage(named: self.splashImageName!)        splashImageView = UIImageView(image: splashImage)        splashImageView!.contentMode = UIViewContentMode.ScaleToFill        splashImageView!.setTranslatesAutoresizingMaskIntoConstraints(false)        rootView.addSubview(splashImageView!)                // set the image view width        var widthConstraint = NSLayoutConstraint(            item: splashImageView!,            attribute: NSLayoutAttribute.Width,            relatedBy: NSLayoutRelation.Equal,            toItem: rootView,            attribute: NSLayoutAttribute.Width,            multiplier: 1.0,            constant: 0        )        rootView.addConstraint(widthConstraint)        // set the height        var heightConstraint = NSLayoutConstraint(            item: splashImageView!,            attribute: NSLayoutAttribute.Height,            relatedBy: NSLayoutRelation.Equal,            toItem: rootView,            attribute: NSLayoutAttribute.Height,            multiplier: 1.0,            constant: 0        )        rootView.addConstraint(heightConstraint);        // center the image view        var centerXConstraint = NSLayoutConstraint(            item: splashImageView!,            attribute: NSLayoutAttribute.CenterX,            relatedBy: NSLayoutRelation.Equal,            toItem: rootView,            attribute: NSLayoutAttribute.CenterX,            multiplier: 1.0,            constant: 0        )        rootView.addConstraint(centerXConstraint);        // center the image view        var centerYConstraint = NSLayoutConstraint(            item: splashImageView!,            attribute: NSLayoutAttribute.CenterY,            relatedBy: NSLayoutRelation.Equal,            toItem: rootView,            attribute: NSLayoutAttribute.CenterY,            multiplier: 1.0,            constant: 0        )        rootView.addConstraint(centerYConstraint)    }    public func getOutlets() -> (UIImageView?, Int?){        return (splashImageView, auxInt);    }    public let splashImageView: UIImageView?    public var splashImageName: String?    public let auxInt: Int?}
上面的代码虽然有点长,但是还是比较容易理解的。代码首先为splashImageView设置图像源,注意splashImageName是Optional String,这是Swift引入的新特性,可以较好的避免空指针异常,程序首先通过常量realName来获取方法参数splashImageName里所含的字符串,如果不为空则赋给splashImageName属性,如果为空,则执行else语名,将splashImageName设置为缺省值,大家可以看一下Swift语言手册,或上节内容,熟悉一下Optional的正规定义,结合本处的代码,也许更容易理解Swift引入的Optional类型的处理方式。

再向下是利用Auto Layout技术画出界面,分为四个步骤,首先设置splashImageView的长、宽和屏幕相同,再设置其中心点的X、Y与屏幕中心重合,这样就实现了将指定图片作为背景图显示的效果。

下面在controller组下创建WKYAppSplashViewController类,代码如下所示:

public class WKYAppSplashViewControler: UIViewController{    override public func viewDidLoad() {        super.viewDidLoad()        let rootView = self.view        //appSplashView = WKYAppSplashView(rootView: self.view, splashImageName: "app_splash.jpg")    }        override public func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()        // Dispose of any resources that can be recreated.    }        public var appSplashView: WKYAppSplashView?}
上面代码比较简单,唯一需要说明的就是viewDidLoad方法中最后注释掉的appSplashView初始化语句,因为对appSplashView进行初始化,会放在具体应用工程中WKYAppSplashViewController子类的viewDidLoad方法中进行。

好了,Cocoa Touch Framework的功能开发就完成了,可以点击运行按钮,如果显示Build Suceed就大功告成了。

下面选择具体应用工程WkgJys,首先建立common, model, view, controller组以利于代码组织。其次在WkgJys目录下,建立comm, model, view, controller, images目录,方法和WkyLib中一样,这里就不再重复了。

我们在WkgJys项目信息页面中,确保已经加入对WkyLib的引用。

接着我们定义新的类JYSAppSplashView类,该类继承于WKYAppSplashView,代码如下所示:

import UIKitimport WkyLibclass JYSAppSplashView: WKYAppSplashView{    override init(rootView: UIView, splashImageName: String? = nil) {        super.init(rootView: rootView, splashImageName: splashImageName)    }}
在上面的代码中首先引入了WkyLib这个Framework,然后重载了父类的构造函数,在本类中,只是简单地直接调用父类的相应方法而已。

下面在controller组下加入JYSAppSplashViewController类,代码如下所示:

import UIKitimport WkyLibclass JYSAppSplashViewController: WKYAppSplashViewControler{    override func viewDidLoad() {        super.viewDidLoad()        appSplashView = JYSAppSplashView(rootView: self.view, splashImageName: "app_splash.jpg")    }}
这段代码很简单,会调用JYSAppSplashView的构造函数,绘制整个界面。

现在我们选择WkgJys为活跃工程,点击运行按钮,这时我们就可以看到Splash页面了。

这里还想多说几句,其实IOS应用中,启动画面是由LaunchScreen.xib来定义的(plist.info文件中定义),我们的Splash页面,实际上是在这个页面之后的一个页面。引入这个页面主要是完成自定义动态启动页面的需求,另外也是为了与Android平台保持一致。
在下一节中,我们将讲一下怎么实现Splash页面一闪而过,进入主界面的实现方式,下节再见。




华丽的分隔线
******************************************************************************************************************************************************************************
希望大家多支持,有大家的支持,我才能走得更远,谢谢!
银行账号:622202 0200 1078 56128 闫涛
我的支付宝:[email protected]

版权声明:本文为博主原创文章,未经博主允许不得转载。

1楼u010850027昨天 20:40
谢谢小伙伴的分享,学习了`(*∩_∩*)′
  相关解决方案