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使用方法,看看還可以實現其它功能。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章