主要是一个搜索电影,显示电影信息的小程序,开发坏境是xcode7.0,swift2.0

创建HTTP请求连接并对连接格式化
了解NSURLSession类的使用方法
通过NSURLSession类的dataTaskWithURL:方法获取远程数据库中的影片数据
配置App Transport Security(应用程序传输安全协议)
将返回的JSON数据格式化成Dictionar 类型的对象
 
第一部分是界面的搭建,需要注意的是,在开发的时候,可以preview你的视图(进行对自动布局结果的调整)
 
第二部分是进行网络的请求与数据的展示
关于网络请求的代码:

func searchIMDBWithContent(content : String){

//在这里需要将传进来的字符串进行格式化(将空格用%20代替)

//        let nospaceString = content.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)

let nospaceString = content.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet(charactersInString:"`#%^{}\"[]|\\<> ").invertedSet)

let urlPath = NSURL(string: "http://www.omdbapi.com/?t=\(nospaceString!)")

let session = NSURLSession.sharedSession()

let task = session.dataTaskWithURL(urlPath!) {

data, response, error ->  Void in

if (error != nil){

print(error?.localizedDescription)

}

//解析可能会出现错误,因此需要使用try来进行处理

do{

let jsonResult = try //在类方法之前加try

NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)as! Dictionary <String , String>

//需要在主线程线程来执行控件显示的代码

if let apiDelegate = self.delegate{

dispatch_async(dispatch_get_main_queue()){

self.delegate?.didfinshIMDbSearch(jsonResult)

}

}

}catch{

print("格式化数据失败")

}

}

task.resume()//这一步是必须的

}

在网络请求的时候,需要注意是在iOS9中,程序的“应用程序传输安全协议”默认是开的,我们需要对它进行配置,程序才能进行网络的访问

有关于配置的方法,在这里。

第三部分是程序结构的划分(MVC)
将有关于网络请求的代码放到了IMDbAPIController中,使用了代理来进行模型层与控制器之间进行交互。
 
 
 
第四部分是界面的虚化:
界面虚化的主要代码是

func blurBackgroundUsingImage(image: UIImage){

let frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)

let imageView = UIImageView(frame: frame)

imageView.image = image

imageView.contentMode = .ScaleAspectFill

let blurEffect = UIBlurEffect(style: .Light)

let blurEffectView = UIVisualEffectView(effect: blurEffect)

blurEffectView.frame = frame

let transparentWhiteView = UIView(frame: frame)

transparentWhiteView.backgroundColor = UIColor(white: 1.0, alpha: 0.30)

let views:Array = [imageView,blurEffectView,transparentWhiteView]

for index in 0 ..< views.count{

if let _ = self.view.viewWithTag(index+1){

let oldView = self.view.viewWithTag(index+1)

oldView?.removeFromSuperview()

}

let viewToIsert = views[index]

self.view.insertSubview(viewToIsert, atIndex: index+1)

viewToIsert.tag = index+1

}

}

其实就是创建3个视图添加上去。

第五部分是对界面的美化工作(新版本出了一点小问题,以前版本的一个函数用不了了,虽然不影响最终结果的显示)
详细的慢慢添加,洗澡吃饭了,,,,,草,,,,,

IMDb Search的更多相关文章

  1. Ranking relevance in yahoo search (2016)论文阅读

    文章链接 https://www.kdd.org/kdd2016/papers/files/adf0361-yinA.pdf abstract 点击特征在长尾query上的稀疏性问题 基础相关性三大技 ...

  2. IMDB电影排行爬取分析

    一.打开IMDB电影T250排行可以看见250条电影数据,电影名,评分等数据都可以看见 按F12进入开发者模式,找到这些数据对应的HTML网页结构,如下所示 可以看见里面有链接,点击链接可以进入电影详 ...

  3. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  4. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  5. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  6. 基于WebGL 的3D呈现A* Search Algorithm

    http://www.hightopo.com/demo/astar/astar.html 最近搞个游戏遇到最短路径的常规游戏问题,一时起兴基于HT for Web写了个A*算法的WebGL 3D呈现 ...

  7. Leetcode: Convert sorted list to binary search tree (No. 109)

    Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...

  8. [LeetCode] Closest Binary Search Tree Value II 最近的二分搜索树的值之二

    Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...

  9. [LeetCode] Closest Binary Search Tree Value 最近的二分搜索树的值

    Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...

随机推荐

  1. apacheserver下载、安装、配置

     1.下载 下载地址:apache下载地址 点击左側"Download"下的链接,打开例如以下页面 这里能够选择版本号.我选择2.4.16.单击"2.4.16" ...

  2. MySQL Cluster基础知识简介以及基本参数介绍

    PS:这些资料都是以前整理的,有些有可能是在网上copy别人的,但是时间长了,记不得出处了,sorry! 在MySQL Cluster环境的配置文件config.ini里面,每一类节点都有两个(或以上 ...

  3. java spring 使用注解来实现缓存

    这里举例使用spring3.1.4 + ehcache 注解的方式使用cache 是在spring3.1加入的 使用方法: 1.ehcache依赖+spring依赖 <!-- ehcache依赖 ...

  4. visualvm连接服务器jvm进行监控

    本地环境,mac: 服务器环境ubuntu: 直接运行jstatd命令,提示 Could not create remote object access denied ("java.util ...

  5. android 注册、登录实现程序

    注册页面: user_register.xml: <?xml version="1.0" encoding="utf-8"?> <Linear ...

  6. eclipse ctrl+左击不能关联相应文件

    <?xml version="1.0" encoding="UTF-8"?><projectDescription> <name& ...

  7. The 7 Stages Of Scaling Web Apps--reference

    reference from:http://highscalability.com/7-stages-scaling-web-apps TUESDAY, SEPTEMBER 23, 2008 AT 4 ...

  8. 非托管C++通过C++/CLI包装调用C# DLL

    项目中要给其它客户程序提供DLL做为接口,该项目是在.Net4.0平台下开发.终所周知.Net的各个版本之间存在着兼容性的问题,但是为了使用高版本运行平台的新特性,又不得不兼顾其它低版本平台客户程序的 ...

  9. python(6)-执行shell命令

    可以执行shell命令的相关模块和函数有: os.system os.spawn* os.popen*          --废弃 popen2.*           --废弃 commands.* ...

  10. javaweb学习总结一(eclipse常用快捷键、debug调试以及junit测试框架)

    一:web的发展趋势1:C/S(客户端/服务器)结构向B/S(浏览器/服务器)结构发展,以后的电脑只需操作系统和浏览器即可.所有的服务都存储在服务器端,只需用户登录后从服务端同步数据,例如:看电影不需 ...