开发的第一个iOS app
2015-09-14 16:35
323 查看
一步一步仿照着imooc的Jake Lin大神做的swift weather 写的,虽然说不算是自己原创,收获还是不少的。
首先Jake写的是用AFNetworking。我是直接用Alamofire + SwiftyJson写的
不知道是不是xcode的版本问题 导入AFNetworking 和Alamofire总是错误 弄了两天才把Alamofire导入进去。
好
下面开始说说学习历程吧
我从9月8号开始学习swift
花了两天时间把swift的基础看完了
跟着课程写了一些demo 了解了字符串 判断 循环 元组 可选型等用法 有的是没接触过的
然后就开始写一个有关天气预报的app
以下是swift代码
//
// ViewController.swift
// Swift Weather
//
// Created by chingyam on 15/9/11.
// Copyright (c) 2015年 chingyam. All rights reserved.
//
import UIKit
import Alamofire
import CoreLocation
import SwiftyJSON
class ViewController: UIViewController , CLLocationManagerDelegate{
let locationManager = CLLocationManager()
@IBOutlet weak var loadinglabel: UILabel!
@IBOutlet weak var loadingindicator: UIActivityIndicatorView!
@IBOutlet weak var temperature: UILabel!
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var location: UILabel!
@IBOutlet weak var Lon: UILabel!
@IBOutlet weak var Lat: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let background = UIImage(named:"background.png")
//获取背景图片对象
self.view.backgroundColor = UIColor(patternImage: background!)
//设置背景图片
locationManager.delegate = self
//初始化LocationManager
locationManager.desiredAccuracy = kCLLocationAccuracyBest
//设置LocationManger精度 设置为最好
self.loadingindicator.startAnimating()
//开始播放indicator动画
if(ios8()){
//判断设备系统版本
locationManager.requestAlwaysAuthorization()
}
locationManager.startUpdatingLocation()
//开始更新地理位置信息
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func ios8() ->Bool
{
var systemVersion = (UIDevice.currentDevice().systemVersion as NSString).doubleValue
//获取系统版本信息
println(systemVersion)
return systemVersion >= 8.0
//版本信息>=8.0返回true 否则返回false
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
var location:CLLocation = locations[locations.count-1] as! CLLocation
//获取最新的地理位置信息
if (location.horizontalAccuracy > 0) {
//判断是否获取到正确的地理位置信息
self.locationManager.stopUpdatingLocation()
//停止更新地理位置信息
println(location.coordinate.latitude)
println(location.coordinate.longitude)
self.Lon.text = "经度:" + String(stringInterpolationSegment:location.coordinate.longitude)
self.Lat.text = "纬度:" + String(stringInterpolationSegment:location.coordinate.latitude )
//设置label显示经纬度
self.updateWeatherInfo(location.coordinate.latitude,longitude:location.coordinate.longitude)
//将经纬度以参数的形式传入到更新天气信息的函数中
}
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!)
{
println(error)
self.loadinglabel.text = "地理位置信息不可用"
//抓取地理位置信息中的错误
}
func updateWeatherInfo(latitude:CLLocationDegrees , longitude:CLLocationDegrees){
//var lat = "?lat=" + String(stringInterpolationSegment: latitude)
// var lon = "&lon=" + String(stringInterpolationSegment: longitude)
// var url = "http://api.openweathermap.org/data/2.5/weather" + lat + lon + "&cnt=0"
var url = "http://api.openweathermap.org/data/2.5/weather"
let params = ["lat":latitude,"lon":longitude,"cnt":0]
//调用天气api的url 和参数
Alamofire.request(.GET, url , parameters: params ).responseJSON{
//调用Alamofire库中的request方法
(request, response,data, error) -> Void in
if(error != nil){
//当没有返回值的时候返回错误
println("Error:\(error)")
println(request)
println(response)
}
else{
println("Success:\(url)")
// println(request)
var json = JSON(data!)
println(json)
self.updateUISuccess(json)
//当返回成功地时候,取出json传入到更新UI的函数当中去
}
}
}
func updateUISuccess(json :JSON){
self.loadingindicator.stopAnimating()
self.loadingindicator.hidden = true
//当获取到json数据的时候,停止indicator动画并且隐藏
self.loadinglabel.text = nil
//加载的标签设置为nil
println(json["name"].string!)
if let tempResult = json["main"]["temp"].double
{
//获取温度信息
var temperature: Double
temperature = round(tempResult - 272.15)
//温度信息为开氏度 转化为摄氏度
self.temperature.text = "\(temperature)°C"
self.temperature.font = UIFont.boldSystemFontOfSize(60)
var cityName = json["name"].stringValue
//获取城市信息
self.location.font = UIFont.systemFontOfSize(40)
self.location.text = "\(cityName)"
var condition = json["weather"][0]["id"].intValue
var sunset = json["sys"]["sunset"].doubleValue
var sunrise = json["sys"]["sunrise"].doubleValue
//获取状态以及日出日落的时间
var nightTime = false
var now = NSDate().timeIntervalSince1970
if ( now > sunset || now < sunrise ){
nightTime = true
}
//判断当前时间是否晚上
self.updateWeatherIcon(condition , nightTime:nightTime)
//将状态和是否晚上的信息传入到updateweathericon的函数当中
}
else{
//如果未获取到温度信息,则说明天气信息不正确,提示用户天气信息不可用
self.loadinglabel.text = "天气信息不可用"
}
}
func updateWeatherIcon (condititon :Int , nightTime :Bool){
//http://bugs.openweathermap.org/projects/api/wiki/Weather_Condition_Codes
//根据api提供的信息对应的天气情况作判断,设置天气图标
if( condititon < 300 )
{
if nightTime {
self.icon.image = UIImage(named: "tstorm1_night")
}
else{
self.icon.image = UIImage(named: "tstorm1")
}
}
else if (condititon < 500){
self.icon.image = UIImage(named:"light_rain")
}
else if(condititon < 600){
self.icon.image = UIImage(named:"shower3")
}
else if(condititon < 700){
self.icon.image = UIImage(named: "snow4")
}
else if (condititon < 771){
if(nightTime){
self.icon.image = UIImage(named:"fog_night")
}
else{
self.icon.image = UIImage(named:"fog")
}
}
else if(condititon < 800){
self.icon.image = UIImage(named:"tstorm3")
}
else if(condititon < 804){
if(nightTime){
self.icon.image = UIImage(named:"cloudy2_night")
}
else{
self.icon.image = UIImage(named:"cloudy2")
}
}
else if(condititon == 804){
self.icon.image = UIImage(named:"overcast")
}
else if((condititon >= 900 && condititon < 903)||(condititon > 904 && condititon < 1000)){
self.icon.image = UIImage(named:"tstorm3")
}
else if (condititon == 903){
self.icon.image = UIImage(named:"snow5")
}
else if (condititon == 904){
self.icon.image = UIImage(named:"sunny")
}
else{
self.icon.image = UIImage(named:"dunno")
}
}
}
首先Jake写的是用AFNetworking。我是直接用Alamofire + SwiftyJson写的
不知道是不是xcode的版本问题 导入AFNetworking 和Alamofire总是错误 弄了两天才把Alamofire导入进去。
好
下面开始说说学习历程吧
我从9月8号开始学习swift
花了两天时间把swift的基础看完了
跟着课程写了一些demo 了解了字符串 判断 循环 元组 可选型等用法 有的是没接触过的
然后就开始写一个有关天气预报的app
以下是swift代码
//
// ViewController.swift
// Swift Weather
//
// Created by chingyam on 15/9/11.
// Copyright (c) 2015年 chingyam. All rights reserved.
//
import UIKit
import Alamofire
import CoreLocation
import SwiftyJSON
class ViewController: UIViewController , CLLocationManagerDelegate{
let locationManager = CLLocationManager()
@IBOutlet weak var loadinglabel: UILabel!
@IBOutlet weak var loadingindicator: UIActivityIndicatorView!
@IBOutlet weak var temperature: UILabel!
@IBOutlet weak var icon: UIImageView!
@IBOutlet weak var location: UILabel!
@IBOutlet weak var Lon: UILabel!
@IBOutlet weak var Lat: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let background = UIImage(named:"background.png")
//获取背景图片对象
self.view.backgroundColor = UIColor(patternImage: background!)
//设置背景图片
locationManager.delegate = self
//初始化LocationManager
locationManager.desiredAccuracy = kCLLocationAccuracyBest
//设置LocationManger精度 设置为最好
self.loadingindicator.startAnimating()
//开始播放indicator动画
if(ios8()){
//判断设备系统版本
locationManager.requestAlwaysAuthorization()
}
locationManager.startUpdatingLocation()
//开始更新地理位置信息
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func ios8() ->Bool
{
var systemVersion = (UIDevice.currentDevice().systemVersion as NSString).doubleValue
//获取系统版本信息
println(systemVersion)
return systemVersion >= 8.0
//版本信息>=8.0返回true 否则返回false
}
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
var location:CLLocation = locations[locations.count-1] as! CLLocation
//获取最新的地理位置信息
if (location.horizontalAccuracy > 0) {
//判断是否获取到正确的地理位置信息
self.locationManager.stopUpdatingLocation()
//停止更新地理位置信息
println(location.coordinate.latitude)
println(location.coordinate.longitude)
self.Lon.text = "经度:" + String(stringInterpolationSegment:location.coordinate.longitude)
self.Lat.text = "纬度:" + String(stringInterpolationSegment:location.coordinate.latitude )
//设置label显示经纬度
self.updateWeatherInfo(location.coordinate.latitude,longitude:location.coordinate.longitude)
//将经纬度以参数的形式传入到更新天气信息的函数中
}
}
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!)
{
println(error)
self.loadinglabel.text = "地理位置信息不可用"
//抓取地理位置信息中的错误
}
func updateWeatherInfo(latitude:CLLocationDegrees , longitude:CLLocationDegrees){
//var lat = "?lat=" + String(stringInterpolationSegment: latitude)
// var lon = "&lon=" + String(stringInterpolationSegment: longitude)
// var url = "http://api.openweathermap.org/data/2.5/weather" + lat + lon + "&cnt=0"
var url = "http://api.openweathermap.org/data/2.5/weather"
let params = ["lat":latitude,"lon":longitude,"cnt":0]
//调用天气api的url 和参数
Alamofire.request(.GET, url , parameters: params ).responseJSON{
//调用Alamofire库中的request方法
(request, response,data, error) -> Void in
if(error != nil){
//当没有返回值的时候返回错误
println("Error:\(error)")
println(request)
println(response)
}
else{
println("Success:\(url)")
// println(request)
var json = JSON(data!)
println(json)
self.updateUISuccess(json)
//当返回成功地时候,取出json传入到更新UI的函数当中去
}
}
}
func updateUISuccess(json :JSON){
self.loadingindicator.stopAnimating()
self.loadingindicator.hidden = true
//当获取到json数据的时候,停止indicator动画并且隐藏
self.loadinglabel.text = nil
//加载的标签设置为nil
println(json["name"].string!)
if let tempResult = json["main"]["temp"].double
{
//获取温度信息
var temperature: Double
temperature = round(tempResult - 272.15)
//温度信息为开氏度 转化为摄氏度
self.temperature.text = "\(temperature)°C"
self.temperature.font = UIFont.boldSystemFontOfSize(60)
var cityName = json["name"].stringValue
//获取城市信息
self.location.font = UIFont.systemFontOfSize(40)
self.location.text = "\(cityName)"
var condition = json["weather"][0]["id"].intValue
var sunset = json["sys"]["sunset"].doubleValue
var sunrise = json["sys"]["sunrise"].doubleValue
//获取状态以及日出日落的时间
var nightTime = false
var now = NSDate().timeIntervalSince1970
if ( now > sunset || now < sunrise ){
nightTime = true
}
//判断当前时间是否晚上
self.updateWeatherIcon(condition , nightTime:nightTime)
//将状态和是否晚上的信息传入到updateweathericon的函数当中
}
else{
//如果未获取到温度信息,则说明天气信息不正确,提示用户天气信息不可用
self.loadinglabel.text = "天气信息不可用"
}
}
func updateWeatherIcon (condititon :Int , nightTime :Bool){
//http://bugs.openweathermap.org/projects/api/wiki/Weather_Condition_Codes
//根据api提供的信息对应的天气情况作判断,设置天气图标
if( condititon < 300 )
{
if nightTime {
self.icon.image = UIImage(named: "tstorm1_night")
}
else{
self.icon.image = UIImage(named: "tstorm1")
}
}
else if (condititon < 500){
self.icon.image = UIImage(named:"light_rain")
}
else if(condititon < 600){
self.icon.image = UIImage(named:"shower3")
}
else if(condititon < 700){
self.icon.image = UIImage(named: "snow4")
}
else if (condititon < 771){
if(nightTime){
self.icon.image = UIImage(named:"fog_night")
}
else{
self.icon.image = UIImage(named:"fog")
}
}
else if(condititon < 800){
self.icon.image = UIImage(named:"tstorm3")
}
else if(condititon < 804){
if(nightTime){
self.icon.image = UIImage(named:"cloudy2_night")
}
else{
self.icon.image = UIImage(named:"cloudy2")
}
}
else if(condititon == 804){
self.icon.image = UIImage(named:"overcast")
}
else if((condititon >= 900 && condititon < 903)||(condititon > 904 && condititon < 1000)){
self.icon.image = UIImage(named:"tstorm3")
}
else if (condititon == 903){
self.icon.image = UIImage(named:"snow5")
}
else if (condititon == 904){
self.icon.image = UIImage(named:"sunny")
}
else{
self.icon.image = UIImage(named:"dunno")
}
}
}
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- IOS开发第三方语音-微信语音
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- iOS开发中实现邮件和短信发送的简单示例
- ios通过按钮点击异步加载图片
- 加载带有手势识别器的XIB文件需注意哪些问题