Swift教程_零基础学习Swift完整实例(七)_swift完整实例(构建展示层)

简介:

5.构建展示层

本章节主要来完善前前面已经创建好的storyboard中的页面,包括自定义的view等。

1.PKOElementTableViewCell

该自定义view作为列表的行view,包含左侧的图片以及中间的文字描述。这里要注意需要通过setNeedsDisplay告诉系统进行绘制。

代码如下。

[objc]  view plain  copy
  1. import UIKit  
  2.   
  3. class PKOElementTableViewCell: UITableViewCell {  
  4.       
  5.     var element:PKOElementDataModel {  
  6.         get{  
  7.             return self.element  
  8.         }  
  9.         set(element){  
  10.             var cellIcon = self.contentView.viewWithTag(1) as PKOElementTableViewCellIcon//获取列表行左侧自定义的view  
  11.             cellIcon.element = element//将元素对象赋值给自定义view  
  12.             cellIcon.setNeedsDisplay()//该方法为异步,告诉系统来给我绘图  
  13.               
  14.             var label = self.contentView.viewWithTag(2) as UILabel//获取列表行文字  
  15.             label.text = element.name  
  16.             label.setNeedsDisplay()  
  17.         }  
  18.     }  
  19.       
  20.     override func awakeFromNib() {  
  21.         super.awakeFromNib()  
  22.         // Initialization code  
  23.     }  
  24.       
  25.     override func setSelected(selected: Bool, animated: Bool) {  
  26.         super.setSelected(selected, animated: animated)  
  27.         // Configure the view for the selected state  
  28.     }  
  29.       
  30. }  

2.PKOElementTableViewCellIcon

该自定义view作为列表行的左侧图片view,通过CG绘制图片和文字并展示出来。这里非常灵活,可以按照以下方法绘制任何信息。

代码如下。

[objc]  view plain  copy
  1. import UIKit  
  2.   
  3. class PKOElementTableViewCellIcon: UIView {  
  4.       
  5.     var element = PKOElementDataModel()  
  6.       
  7.     override func drawRect(rect: CGRect) {  
  8.         // 绘制背景图  
  9.         var point: CGPoint  
  10.         var image = self.element.imageForCellIconElementView as UIImage  
  11.         var elementRect = CGRectMake(00, image.size.width, image.size.height)  
  12.         image.drawInRect(elementRect)  
  13.           
  14.         // draw the element number  
  15.         var font = UIFont.boldSystemFontOfSize(11)  
  16.         point = CGPointMake(3,2)  
  17.         self.element.name.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])//swift都是通过dictionary来指定样式的,例如字体样式的键就是NSFontAttributeName  
  18.           
  19.         // draw the element symbol  
  20.         font = UIFont.boldSystemFontOfSize(18)  
  21.         var stringSize = self.element.symbol.sizeWithAttributes([NSFontAttributeName:font]) as CGSize  
  22.         point = CGPointMake((elementRect.size.width-stringSize.width)/214.0)  
  23.         self.element.symbol.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])  
  24.     }  
  25. }  

3.PKOElementDetailImageView

该自定义view作为明细页面的正面view,通过CG绘制绘制图片、文字以及阴影并展示出来。这里暂时不添加阴影效果,只作为普通view,阴影部分后面章节再详细讲解。

代码如下。

[objc]  view plain  copy
  1. import UIKit  
  2.   
  3. class PKOElementDetailImageView: UIView {  
  4.       
  5.     var detailController:PKOElementDetailViewController?  
  6.     var element = PKOElementDataModel()  
  7.       
  8.     //这里没有弄明白,我重写了init(frame: CGRect),会提示需要重写init(),init(coder aDecoder: NSCoder),不然会报错  
  9.     override init() {  
  10.         super.init();  
  11.     }  
  12.       
  13.     required init(coder aDecoder: NSCoder) {  
  14.         super.init(coder: aDecoder)  
  15.     }  
  16.       
  17.     //通过frame初始化  
  18.     override init(frame: CGRect) {  
  19.         super.init(frame: frame)  
  20.         var tapGestureRecognizer = UITapGestureRecognizer(target: self, action"tapAction:")//添加点击(属于手势识别)事件  
  21.         self.addGestureRecognizer(tapGestureRecognizer)//将该点击事件添加到view的手势识别中  
  22.     }  
  23.       
  24.     //点击事件,点击时执行控制器中的flipImageView方法,功能是view翻转  
  25.     func tapAction(tapGestureRecognizer: UITapGestureRecognizer){  
  26.         self.detailController.flipImageView()  
  27.     }  
  28.       
  29.     override func drawRect(rect: CGRect)  
  30.     {  
  31.         // 绘制背景图  
  32.         var image = self.element.imageForDetailElementTileView as UIImage  
  33.         var imageRect = CGRectMake(00, image.size.width, image.size.height)  
  34.         image.drawInRect(imageRect)  
  35.           
  36.         // draw the element name  
  37.         var font = UIFont.boldSystemFontOfSize(36)  
  38.         var stringSize = self.element.name.sizeWithAttributes([NSFontAttributeName:font]) as CGSize!  
  39.         var point = CGPointMake((self.bounds.size.width-stringSize.width)/2self.bounds.size.height/2-50)  
  40.         self.element.name.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])  
  41.           
  42.           
  43.         // draw the element number  
  44.         font = UIFont.boldSystemFontOfSize(48)  
  45.         point = CGPointMake(1010)  
  46.         self.element.atomicNumber.description.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])  
  47.           
  48.         // draw the element symbol  
  49.         font = UIFont.boldSystemFontOfSize(96)  
  50.         stringSize = self.element.symbol.sizeWithAttributes([NSFontAttributeName:font]) as CGSize!  
  51.         point = CGPointMake((self.bounds.size.width-stringSize.width)/2self.bounds.size.height-120)  
  52.         self.element.symbol.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])  
  53.     }  
  54. }  

4.PKOElementDetailImageFlippedView

该自定义view继承于PKOElementDetailImageView,作为它的反面,做法与PKOElementDetailImageView相似,不过属性及公共属性延用PKOElementDetailImageView,重写drawRect即可。

其中使用了超链接,能够直接链接到维基百科的对应化学元素页面上,在初始化view时添加一个链接button即可。

代码如下。

[objc]  view plain  copy
  1. import UIKit  
  2.   
  3. class PKOElementDetailImageFlippedView: PKOElementDetailImageView {  
  4.       
  5.     var wikipediaButton: UIButton?  
  6.       
  7.     override init() {  
  8.         super.init()  
  9.     }  
  10.       
  11.     required init(coder aDecoder: NSCoder) {  
  12.         super.init(coder: aDecoder)  
  13.     }  
  14.       
  15.     override init(frame: CGRect) {  
  16.         super.init(frame: frame)  
  17.         //子view随着父view(self)的frame大小而自动改变大小  
  18.         self.autoresizesSubviews = true  
  19.         self.setUpUserInterface()  
  20.     }  
  21.       
  22.     override func drawRect(rect: CGRect)  
  23.     {  
  24.         // 绘制背景  
  25.         var image = self.element.imageForDetailElementTileView as UIImage  
  26.         var imageRect = CGRectMake(00, image.size.width, image.size.height)  
  27.         image.drawInRect(imageRect)  
  28.           
  29.         // draw the element number  
  30.         var font = UIFont.boldSystemFontOfSize(32)  
  31.         var point = CGPointMake(1010)  
  32.         self.element.atomicNumber.description.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])  
  33.           
  34.         // draw the element symbol  
  35.         font = UIFont.boldSystemFontOfSize(32)  
  36.         var stringSize = self.element.name.sizeWithAttributes([NSFontAttributeName:font]) as CGSize  
  37.         point = CGPointMake(self.bounds.size.width - stringSize.width - 1010)  
  38.         self.element.symbol.drawAtPoint(point,withAttributes:[NSFontAttributeName:font])  
  39.           
  40.         // draw the element name  
  41.         font = UIFont.boldSystemFontOfSize(32)  
  42.         point = CGPointMake((self.bounds.size.width - stringSize.width)/280)  
  43.         self.element.name.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])  
  44.           
  45.         // draw the element weight  
  46.         font = UIFont.boldSystemFontOfSize(28)  
  47.         point = CGPointMake((self.bounds.size.width - stringSize.width)/2160)  
  48.         self.element.atomicWeight.drawAtPoint(point, withAttributes: [NSFontAttributeName:font])  
  49.           
  50.           
  51.     }  
  52.       
  53.     func setUpUserInterface() {  
  54.         var buttonFrame = CGRectMake(10.0209.0234.037.0)  
  55.         // 创建一个链接  
  56.         self.wikipediaButton = UIButton.buttonWithType(UIButtonType.System) as? UIButton//按钮样式为系统默认,4个圆角  
  57.         self.wikipediaButton?.frame = buttonFrame  
  58.         var font = UIFont.boldSystemFontOfSize(22)  
  59.         self.wikipediaButton?.titleLabel?.font = font  
  60.         self.wikipediaButton?.setTitle("View at Wikipedia", forState: UIControlState.Normal)//任何状态按钮都是高亮  
  61.           
  62.         // 按钮在view中的对其方式,水平垂直均居中  
  63.         self.wikipediaButton?.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Center  
  64.         self.wikipediaButton?.contentVerticalAlignment = UIControlContentVerticalAlignment.Center  
  65.           
  66.         //添加点击事件,点击手指离开时还在按钮内触发  
  67.         self.wikipediaButton?.addTarget(self, action"jumpToWikipedia:", forControlEvents: UIControlEvents.TouchUpInside)  
  68.         self.addSubview(self.wikipediaButton!)  
  69.     }  
  70.       
  71.     func jumpToWikipedia(sender: AnyObject!){  
  72.         var wikiPageString = "http://en.wikipedia.org/wiki/"+self.element.name  
  73.         if (!UIApplication.sharedApplication().openURL(NSURL.URLWithString(wikiPageString)))  
  74.         {  
  75.             // 如果访问链接错误的处理代码  
  76.         }  
  77.     }  
  78. }  
原文地址:http://blog.csdn.net/ooppookid/article/details/40373675


相关文章
|
4月前
|
IDE 开发工具 Swift
Swift语言的教程
Swift语言的教程
49 1
|
Swift
(一)swift的基本学习
(一)swift的基本学习
137 0
|
Swift 编译器
Swift - 实例对象调用协议方法优先级分析/ witness_methos witness_table分析
本文主要探究: 当一个类遵循了协议,且协议和类都有方法实现时,实例对象调用方法的优先顺序
Swift - 实例对象调用协议方法优先级分析/ witness_methos witness_table分析
|
开发工具 Swift iOS开发
Swift学习第二练——Swift项目时光电影
Swift学习第二练——Swift项目时光电影
126 0
Swift学习第二练——Swift项目时光电影
|
Swift 开发者 iOS开发
Swift学习第一练——用Swift实现的FlappyBird小游戏
Swift学习第一练——用Swift实现的FlappyBird小游戏
167 0
Swift学习第一练——用Swift实现的FlappyBird小游戏
|
iOS开发 索引
Swift学习第二枪
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51441959 上一次学习关于变量常量,数据类型,数据类型之间的转换,这次从字符串开始学习。
761 0
|
存储 编解码 iOS开发
Swift学习第三枪
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51444292 类和结构体(Classes and Structures) 1.Swift 中类和结构体有很多共同点。
798 0
|
存储 安全
Swift学习第一枪
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/51332496 1常量和变量 常量和变量把一个名字和一个指定类型的值关联起来。
773 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
93 2
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
200 2