作者聲明
因個人能力問題,文中不免會有錯誤之處,歡迎各位讀者交流,批評,指正!
摘要
設計一個簡單的圖片瀏覽應用,可實現圖片瀏覽、設置夜間模式、圖片縮放、更改圖片序號和描述、隱藏設置視圖等。
用到的控件
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
重點 難點 注意點
- 得到plist文件中圖片描述的方法: support文件放在一個.app文件裏面,稱爲一個包(bundle),利用類方法 NSBundle *bundle = [NSBundle mainBundle]得到該包,然後調用對象方法NSString *path = [bundle pathForResource:@”imageDescs” ofType:@”plist”];得到其路徑,最後通過路徑將其中的內容提取到數組中。
- 直接使用_view得到當前viewController的_view變量好像是不合理的表達。個人猜測可能是因爲:_view是當前viewController類的父類UIviewController的成員變量,其定義爲@Package。
- 將plist裏面的內容提取到數組中的操作是放在- (void)viewDidLoad方法裏面。
- %.f和(int)的區別,前者四捨五入,後者僅僅截取整數部分,所以爲了保證二者一致,則int方法裏面將原值+0.5.
- 在通過比例因子對圖片進行縮放的時候,要注意使用絕對縮放。
- 如果要改變某個控件,則將其定義爲成員變量,如果要監聽其動作,則對其定義觸發事件。
待完善的內容
- @package 修飾的成員變量,其作用域,權限怎樣。
- @private 所謂的私有,究竟是怎麼一回事,結合方法的私有。
- 深入研究plist使用方法,看看還可以實現其它功能。