ISO开发基础—简单的图片浏览app

作者声明

因个人能力问题,文中不免会有错误之处,欢迎各位读者交流,批评,指正!

摘要

设计一个简单的图片浏览应用,可实现图片浏览、设置夜间模式、图片缩放、更改图片序号和描述、隐藏设置视图等。

用到的控件

button imageView lable slider switch

实例

viewController . h代码

//
//  ViewController.h
//  图片浏览器
//
//  Created by dqw on 15/5/6.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UILabel *imageNo;

@property (weak, nonatomic) IBOutlet UILabel *imageDesc;

@property (weak, nonatomic) IBOutlet UIView *settingView;

- (IBAction)changImages:(UISlider *)sender;

- (IBAction)setMode:(UISwitch *)sender;

- (IBAction)scaleImage:(UISlider *)sender;

- (IBAction)displaySettingView:(id)sender;


@end

viewController . m代码

//
//  ViewController.m
//  图片浏览器
//
//  Created by dqw on 15/5/6.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

{
// 在此定义成员变量是为了在下面的多个方法能够使用它。
    NSArray *_imageDescs;
}

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

     // 更改图片描述,图片和图片描述子类都放在一个app包里面,mianbundle 就是得到这个包。
    NSBundle *bundle = [NSBundle mainBundle];

    // 得到包里面该文件的路径。
    NSString *path = [bundle pathForResource:@"imageDescs" ofType:@"plist"];

    // 将路径里面的文件提取至数组里面。
    _imageDescs = [NSArray arrayWithContentsOfFile:path];

     _imageDesc.text = _imageDescs[0];

}

// 定义动画方法。
- (void)butClickWithBlock:(void(^)())block
{
    [UIView beginAnimations:nil context:nil];

    [UIView setAnimationDuration:1.0];

    block();

    [UIView commitAnimations];
}

// 监听图片浏览滑钮,改变图片,图片序号,图片描述。
- (IBAction)changImages:(UISlider *)sender {

    [self butClickWithBlock:^{

        // 更改图片序号,注意滑钮的值要改为整数,此处的%.f表达表示四舍五入。
        _imageNo.text = [NSString stringWithFormat:@"%.f/16", sender.value];

        // 得到图片的序号,int强制类型转化仅仅提取整数部分,没有四舍五入,所以为了和上面对应,要+0.5.
        int no = (int)(sender.value + 0.5);

        // 更改图片。
        NSString *imageName = [NSString stringWithFormat:@"%d.png", no - 1];

        UIImage *image = [UIImage imageNamed:imageName];

        _imageView.image = image;

        // 以此更改图片描述。
        _imageDesc.text = _imageDescs[no-1];

    }]; 
}

// 监听夜间模式按钮。
- (IBAction)setMode:(UISwitch *)sender {

    [self butClickWithBlock:^{
        if (sender.on){

        // 用这种方法编译失败,原因不清楚,好像_view这个表达不合理。可能是因为_view是当前viewController类的父类UIviewController的成员变量,其定义为@Package。
       // _view.backgroundColor = [UIColor darkGrayColor];

        self.view.backgroundColor = [UIColor darkGrayColor];

        // 下面的表达也是可以的,背景色是设置为灰色,而不是黑色。
        //[self.view setBackgroundColor:[UIColor darkGrayColor]];
        }
        else
        {
            [self.view setBackgroundColor:[UIColor whiteColor]];
        }
    }];
}

// 监听缩放图片滑钮。
- (IBAction)scaleImage:(UISlider *)sender {

    [self butClickWithBlock:^{

        float scaleXY = sender.value;

    // 该方法错误,它是相对缩放,在当前的基础上缩放,变换不均匀,当图片缩小到零的时候,图片会消失,无法恢复。
    //_imageView.transform =  CGAffineTransformScale(_imageView.transform, scaleXY, scaleXY);

    //该方法是绝对缩放,推荐使用。
    _imageView.transform = CGAffineTransformMakeScale(scaleXY, scaleXY);

    // 与上面的方法相似,得到其最初状态,然后进行型对缩放。
    //_imageView.transform = CGAffineTransformScale(CGAffineTransformIdentity, scaleXY, scaleXY);

    }];

}

// 监听隐藏设置视图按钮。
- (IBAction)displaySettingView:(id)sender {

    [self butClickWithBlock:^{

        CGRect frame = _settingView.frame;

    if (_settingView.frame.origin.y < self.view.frame.size.height) {

        // 注意加减的是settingview的高度。
        frame.origin.y += _settingView.frame.size.height;

    }
    else{
        frame.origin.y -= _settingView.frame.size.height;

    }
    _settingView.frame = frame;

    }];

}
@end

重点 难点 注意点

  1. 得到plist文件中图片描述的方法: support文件放在一个.app文件里面,称为一个包(bundle),利用类方法 NSBundle *bundle = [NSBundle mainBundle]得到该包,然后调用对象方法NSString *path = [bundle pathForResource:@”imageDescs” ofType:@”plist”];得到其路径,最后通过路径将其中的内容提取到数组中。
  2. 直接使用_view得到当前viewController的_view变量好像是不合理的表达。个人猜测可能是因为:_view是当前viewController类的父类UIviewController的成员变量,其定义为@Package。
  3. 将plist里面的内容提取到数组中的操作是放在- (void)viewDidLoad方法里面。
  4. %.f和(int)的区别,前者四舍五入,后者仅仅截取整数部分,所以为了保证二者一致,则int方法里面将原值+0.5.
  5. 在通过比例因子对图片进行缩放的时候,要注意使用绝对缩放。
  6. 如果要改变某个控件,则将其定义为成员变量,如果要监听其动作,则对其定义触发事件。

待完善的内容

  1. @package 修饰的成员变量,其作用域,权限怎样。
  2. @private 所谓的私有,究竟是怎么一回事,结合方法的私有。
  3. 深入研究plist使用方法,看看还可以实现其它功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章