天气预报---网络加载最新天气信息,截取JSON文件

仿普通的手机上的天气预报功能,从网络上截取JSON文件


实现的效果图如下:



具体代码如下:


FirstViewController.m文件


#import "FirstViewController.h"

#import "JRViewController.h"

#import "CityModel.h"

#import "JSONKit.h"



#define kW self.view.frame.size.width

#define kH self.view.frame.size.height



@interface FirstViewController ()


//当前城市

@property (nonatomic,copy) NSString * cityName;


//当前日期

@property (nonatomic,strong) NSArray * dateArray;


//当前天气小图片

@property (nonatomic,strong) NSArray * imageViewArray;


//当前温度label

@property (nonatomic,strong) NSArray * temperArray;


//天气详情介绍

@property (nonatomic,strong) NSArray * introArray;


//右上角,当前温度

@property (nonatomic,copy) NSString * rightTemper;


//右上角,天气情况

@property (nonatomic,copy) NSString * rightIntro;


//晒衣指数

@property (nonatomic,copy) NSString * dress;



//紫外线指数

@property (nonatomic,copy) NSString * purple;



//洗车指数

@property (nonatomic,copy) NSString * car;



//人体舒适程度

@property (nonatomic,copy) NSString * comfort;


@end


@implementation FirstViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    

    self.view.backgroundColor=[UIColor whiteColor];

    UIImageView * imageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"DuoYun"]];

    imageView.frame=self.view.bounds;

    [self.view addSubview:imageView];

    self.title=@"天气预报";

    

    //加载烟台的天气

    [self _loadYT];

        

    //加载视图

    [self _loadView];   

}


#pragma mark - 加载视图

- (void) _loadView

{


    //右上角当天温度情况

    UILabel * leftLabel=[[UILabel alloc]initWithFrame:CGRectMake(200, 60, kW-200, 50)];

    //leftLabel.backgroundColor=[UIColor redColor];

    leftLabel.textAlignment=NSTextAlignmentCenter;

    leftLabel.text=_rightTemper;

    [leftLabel setFont:[UIFont fontWithName:nil size:30]];

    leftLabel.textColor=[UIColor whiteColor];

    [self.view addSubview:leftLabel];


    //右上角,天气情况

    UILabel * rightIntroLabel=[[UILabel alloc]initWithFrame:CGRectMake(200, 100, kW-200, 40)];

    //rightIntroLabel.backgroundColor=[UIColor greenColor];

    rightIntroLabel.text=_rightIntro;

    [rightIntroLabel setTextColor:[UIColor blueColor]];

    rightIntroLabel.textAlignment=NSTextAlignmentCenter;

    [self.view addSubview:rightIntroLabel];

    

    

    

    //当前城市

    UILabel * RightCityLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 70, 150, 70)];

    //RightCityLabel.backgroundColor=[UIColor greenColor];

    [RightCityLabel setTextColor:[UIColor whiteColor]];

    RightCityLabel.textAlignment=NSTextAlignmentCenter;

    RightCityLabel.text=_cityName;

    [RightCityLabel setFont:[UIFont fontWithName:nil size:40]];

    [self.view addSubview:RightCityLabel];

    

    

    //切换城市按钮

    UIButton * changeCityButton=[[UIButton alloc]initWithFrame:CGRectMake((kW-100)/2, kH-50, 100, 45)];

    changeCityButton.backgroundColor=[UIColor purpleColor];

    [changeCityButton setTitle:@"切换城市" forState:UIControlStateNormal];

    [changeCityButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];

    [changeCityButton addTarget:self action:@selector(changeCity) forControlEvents:UIControlEventTouchUpInside];

   

    [self.view addSubview:changeCityButton];

    

    

    

    //下方多日天气视图

    for (int i=0; i<4; i++)

    {

        UIView * view=[[UIView alloc]initWithFrame:CGRectMake(((kW-4*80)/5)*(i+1)+i*80, kH-290, 80, 230)];

        view.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.1];

        

        

        //date

        UILabel * dateLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 80, 50)];

        dateLabel.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.2];

        dateLabel.text=_dateArray[i];

        dateLabel.textAlignment=NSTextAlignmentCenter;

        [view addSubview:dateLabel];

        

        

        //image

        UIImageView * imageView=[[UIImageView alloc]initWithFrame:CGRectMake(0, 55, 80, 80)];

        //imageView.backgroundColor=[UIColor greenColor];

        NSURL * url=[NSURL URLWithString:_imageViewArray[i]];

        NSData * data=[NSData dataWithContentsOfURL:url];

        UIImage * image=[UIImage imageWithData:data];

        imageView.image=image;

        [view addSubview:imageView];

        

        //天气情况简介label

        UILabel * intrLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 130, 80, 60)];

        //intrLabel.backgroundColor=[UIColor redColor];

        intrLabel.textAlignment=NSTextAlignmentCenter;

        intrLabel.adjustsFontSizeToFitWidth=YES;

        intrLabel.text=_introArray[i];

        [view addSubview:intrLabel];

        

        

        

        //温度label

        UILabel * tempery=[[UILabel alloc]initWithFrame:CGRectMake(0, 190, 80, 40)];

        tempery.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.2];

        tempery.text=_temperArray[i];

        tempery.textAlignment=NSTextAlignmentCenter;

        [tempery setFont:[UIFont fontWithName:nil size:15]];

        [view addSubview:tempery];


        [self.view addSubview:view];

        


        //中间比较大的视图

        UIView * middleView=[[UIView alloc]initWithFrame:CGRectMake(50, 140, kW-100, 225)];

        middleView.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.05];

        

        //晒衣指数

        UILabel * dressLabel=[[UILabel alloc]initWithFrame:CGRectMake(50, 10, 100, 40)];

        dressLabel.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.06];

        dressLabel.text=@"晒衣指数";

        dressLabel.textAlignment=NSTextAlignmentCenter;

        dressLabel.textColor=[UIColor whiteColor];

        [middleView addSubview:dressLabel];

        

        

        

        UILabel * RdressLabel=[[UILabel alloc]initWithFrame:CGRectMake(180, 5, 250, 50)];

        //RdressLabel.backgroundColor=[UIColor redColor];

        RdressLabel.text=_dress;

        [RdressLabel setTextColor:[UIColor whiteColor]];

        [middleView addSubview:RdressLabel];

        

        

        

        

        

        //紫外线指数

        UILabel * purpleLabel=[[UILabel alloc]initWithFrame:CGRectMake(50, 65, 100,40)];

        purpleLabel.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.06];

        purpleLabel.text=@"紫外线指数";

        purpleLabel.textAlignment=NSTextAlignmentCenter;

        purpleLabel.textColor=[UIColor whiteColor];

        [middleView addSubview: purpleLabel];

        


        UILabel * RpurpleLabel=[[UILabel alloc]initWithFrame:CGRectMake(180, 10+50, 250,50)];

        //RpurpleLabel.backgroundColor=[UIColor redColor];

        RpurpleLabel.text=_purple;

        [RpurpleLabel setTextColor:[UIColor whiteColor]];

        [middleView addSubview: RpurpleLabel];

        


        //洗车指数

        UILabel * carLabel=[[UILabel alloc]initWithFrame:CGRectMake(50, 65+40+15, 100, 40)];

        carLabel.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.06];

        carLabel.text=@"洗车指数";

        carLabel.textAlignment=NSTextAlignmentCenter;

        carLabel.textColor=[UIColor whiteColor];

        [middleView addSubview:carLabel];

        

        UILabel * RcarLabel=[[UILabel alloc]initWithFrame:CGRectMake(180, 65+50, 250, 50)];

        //RcarLabel.backgroundColor=[UIColor redColor];

        RcarLabel.text=_car;

        [RcarLabel setTextColor:[UIColor whiteColor]];

        [middleView addSubview:RcarLabel];


        //人体舒适程度

        UILabel * personComfortLabel=[[UILabel alloc]initWithFrame:CGRectMake(50, 115+50+5, 100, 40)];

        personComfortLabel.backgroundColor=[UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:0.06];

        personComfortLabel.text=@"人体舒适程度";

        personComfortLabel.adjustsFontSizeToFitWidth=YES;

        personComfortLabel.textAlignment=NSTextAlignmentCenter;

        personComfortLabel.textColor=[UIColor whiteColor];

        [middleView addSubview:personComfortLabel];

        

        

        

        UILabel * RpersonComfortLabel=[[UILabel alloc]initWithFrame:CGRectMake(180, 115+50, 250, 50)];

        //RpersonComfortLabel.backgroundColor=[UIColor redColor];

        RpersonComfortLabel.text=_comfort;

        [RpersonComfortLabel setTextColor:[UIColor whiteColor]];

        [middleView addSubview:RpersonComfortLabel];


        [self.view addSubview:middleView];

  

    }

}



#pragma mark - 加载烟台的天气

- (void) _loadYT

{

    NSURL * url=[NSURL URLWithString:@"http://m.weather.com.cn/atad/101120501.html"];

    NSData * data=[NSData dataWithContentsOfURL:url];

    NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

    

    NSDictionary * tempDic=dic[@"weatherinfo"];

    

    //城市名

    NSString * cityName=tempDic[@"city"];

    _cityName=cityName;

    

    //日期数组

    NSDate * date1=[NSDate date];

    NSDate * date2=[NSDate dateWithTimeIntervalSinceNow:60*60*24];

    NSDate * date3=[NSDate dateWithTimeIntervalSinceNow:60*60*24*2];

    NSDate * date4=[NSDate dateWithTimeIntervalSinceNow:60*60*24*3];

    NSDateFormatter * format=[[NSDateFormatter alloc]init];

    [format setDateFormat:@"MMdd"];

    NSString * str1=[format stringFromDate:date1];

    NSString * str2=[format stringFromDate:date2];

    NSString * str3=[format stringFromDate:date3];

    NSString * str4=[format stringFromDate:date4];

    _dateArray=@[str1,str2,str3,str4];

    

    

    //温度数组

    NSString * temper1=tempDic[@"temp1"];

    NSString * temper2=tempDic[@"temp2"];

    NSString * temper3=tempDic[@"temp3"];

    NSString * temper4=tempDic[@"temp4"];

    

    _temperArray=@[temper1,temper2,temper3,temper4];

    

    //天气小图标数组---存放图片地址

    NSString * string1=tempDic[@"img1"];

    NSInteger index1=[string1 integerValue];

    NSString * imageSrc1=@"http://i.tq121.com.cn/i/mobile/images/d%02d.png";

    imageSrc1=[NSString stringWithFormat:imageSrc1,index1];

    //NSLog(@"%@",imageSrc1);

    

    

    NSString * string2=tempDic[@"img3"];

    NSInteger index2=[string2 integerValue];

    NSString * imageSrc2=@"http://i.tq121.com.cn/i/mobile/images/d%02d.png";

    imageSrc2=[NSString stringWithFormat:imageSrc2,index2];

    //NSLog(@"%@",imageSrc2);

 

    NSString * string3=tempDic[@"img5"];

    NSInteger index3=[string3 integerValue];

    NSString * imageSrc3=@"http://i.tq121.com.cn/i/mobile/images/d%02d.png";

    imageSrc3=[NSString stringWithFormat:imageSrc3,index3];

    //NSLog(@"%@",imageSrc3);

    

    NSString * string4=tempDic[@"img7"];

    NSInteger index4=[string4 integerValue];

    NSString * imageSrc4=@"http://i.tq121.com.cn/i/mobile/images/d%02d.png";

    imageSrc4=[NSString stringWithFormat:imageSrc4,index4];

    //NSLog(@"%@",imageSrc4);

   

    _imageViewArray=@[imageSrc1,imageSrc2,imageSrc3,imageSrc4];

    

    //天气详情数组

    NSString * intr1=tempDic[@"weather1"];

    NSString * intr2=tempDic[@"weather2"];

    NSString * intr3=tempDic[@"weather3"];

    NSString * intr4=tempDic[@"weather4"];

    

    _introArray=@[intr1,intr2,intr3,intr4];

    

   //右上角当天的温度情况

    _rightTemper=tempDic[@"temp1"];

    

    //右上角当天天气情况

    _rightIntro=tempDic[@"weather1"];


    

    //晾衣指数

    _dress=tempDic[@"index_ls"];

    

    

    //紫外线指数

    

    _purple=tempDic[@"index_uv"];

    

    

    //洗车指数

    _car=tempDic[@"index_xc"];

    

    

    //人体舒适程度

    _comfort=tempDic[@"index_co"];


}


    

    


- (void) _loadData

{

    

    NSString * path=[[NSBundle mainBundle] pathForResource:@"weather_city_code.json" ofType:nil];

    NSData * data=[NSData dataWithContentsOfFile:path];

    NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

    //NSLog(@"%@",dic);

    


    NSArray * array=dic[@"城市代码"];

    //NSLog(@"%@",array);

    

    

    //创建model

    CityModel * citymodel=[[CityModel alloc]init];

    for (int i=0; i<array.count; i++)

    {

        NSDictionary * tempDic=array[i];

        //NSLog(@"%@",tempDic);

       

        citymodel.provinceName=tempDic[@""];    //获取到各省

        //NSLog(@"%@",citymodel.provinceName);

        

        NSArray * cityArray=tempDic[@""];

        for(NSDictionary * cityDic in cityArray)

        {

            NSLog(@"%@",cityDic);

//            _cityArray=cityDic[@"市名"];

//            _codeArray=cityDic[@"编码"];

        }

       

    }

   

}



- (void) changeCity

{

    JRViewController * jrVC=[[JRViewController alloc]init];

    [self.navigationController pushViewController:jrVC animated:YES];

}


@end



JSON文件


{
    "weatherinfo": {
        "city": "烟台",
        "city_en": "yantai",
        "date_y": "2015年6月15日",
        "date": "",
        "week": "星期一",
        "fchh": "11",
        "cityid": "101120501",
        "temp1": "29℃~19℃",
        "temp2": "31℃~19℃",
        "temp3": "31℃~19℃",
        "temp4": "28℃~18℃",
        "temp5": "26℃~17℃",
        "temp6": "26℃~17℃",
        "tempF1": "84.2℉~66.2℉",
        "tempF2": "87.8℉~66.2℉",
        "tempF3": "87.8℉~66.2℉",
        "tempF4": "82.4℉~64.4℉",
        "tempF5": "78.8℉~62.6℉",
        "tempF6": "78.8℉~62.6℉",
        "weather1": "晴",
        "weather2": "晴转多云",
        "weather3": "多云",
        "weather4": "多云转雷阵雨",
        "weather5": "多云",
        "weather6": "多云",
        "img1": "0",
        "img2": "99",
        "img3": "0",
        "img4": "1",
        "img5": "1",
        "img6": "99",
        "img7": "1",
        "img8": "4",
        "img9": "1",
        "img10": "99",
        "img11": "1",
        "img12": "99",
        "img_single": "0",
        "img_title1": "晴",
        "img_title2": "晴",
        "img_title3": "晴",
        "img_title4": "多云",
        "img_title5": "多云",
        "img_title6": "多云",
        "img_title7": "多云",
        "img_title8": "雷阵雨",
        "img_title9": "多云",
        "img_title10": "多云",
        "img_title11": "多云",
        "img_title12": "多云",
        "img_title_single": "晴",
        "wind1": "南风3-4级",
        "wind2": "南风3-4级",
        "wind3": "南风3-4级",
        "wind4": "东南风4-5级",
        "wind5": "东南风4-5级转3-4级",
        "wind6": "东北风转东风3-4级",
        "fx1": "南风",
        "fx2": "南风",
        "fl1": "3-4级",
        "fl2": "3-4级",
        "fl3": "3-4级",
        "fl4": "4-5级",
        "fl5": "4-5级转3-4级",
        "fl6": "3-4级",
        "index": "热",
        "index_d": "天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。",
        "index48": "",
        "index48_d": "",
        "index_uv": "强",
        "index48_uv": "",
        "index_xc": "较适宜",
        "index_tr": "适宜",
        "index_co": "较舒适",
        "st1": "28",
        "st2": "18",
        "st3": "30",
        "st4": "17",
        "st5": "30",
        "st6": "17",
        "index_cl": "较适宜",
        "index_ls": "极适宜",
        "index_ag": "不易发"
    }
}



   PS:该案例的关键之处在于截取JSON文件,一层一层解开,直到挑出对自己有用的部分~   (说的简单,解了一上午,把自己给绕进去了,蠢哭~~~






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值