IOS 應(yīng)用程序管理的實(shí)現(xiàn)
IOS 應(yīng)用程序管理的實(shí)現(xiàn)
1. 項(xiàng)目名稱:應(yīng)用管理
2. 項(xiàng)目截圖展示

3. 項(xiàng)目功能
展示應(yīng)用圖標(biāo),名稱和下載按鈕
點(diǎn)擊下載按鈕,出現(xiàn)“正在下載”圖標(biāo)
4. 項(xiàng)目代碼
模型代碼:AppInfo.h
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface AppInfo : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *icon; @property (nonatomic, strong, readonly) UIImage *image; /** 使用字典實(shí)例化模型 */ - (instancetype)initWithDict:(NSDictionary *)dict; /** 快速實(shí)例化一個(gè)對(duì)象 */ + (instancetype)appInfoWithDict:(NSDictionary *)dict; /** 返回所有plist中的數(shù)據(jù)模型數(shù)組 */ + (NSArray *)appList; @end
模型代碼:AppInfo.m
#import "AppInfo.h"
@implementation AppInfo
// 合成指令,主動(dòng)指定屬性使用的成員變量名稱
@synthesize image = _image;
//圖片模型
- (UIImage *)image
{
if (_image == nil) {
_image = [UIImage imageNamed:self.icon];
}
return _image;
}
- (instancetype)initWithDict:(NSDictionary *)dict
{
self = [super init];
if (self) {
// 用字典給屬性賦值
// self.name = dict[@"name"]; //將字典的內(nèi)容賦值給屬性
// self.icon = dict[@"icon"];
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
+ (instancetype)appInfoWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
+ (NSArray *)appList
{
NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]];
// 創(chuàng)建一個(gè)臨時(shí)可變數(shù)組
NSMutableArray *arrayM = [NSMutableArray array];
// 遍歷數(shù)組,依次轉(zhuǎn)換模型
for (NSDictionary *dict in array) {
[arrayM addObject:[AppInfo appInfoWithDict:dict]];
}
return arrayM;
}
@end
模型View:AppView.h
#import <UIKit/UIKit.h> @class AppInfo; @interface AppView : UIView /** 類方法,方便調(diào)用視圖 */ + (instancetype)appView; /** 實(shí)例化視圖,并使用appInfo設(shè)置視圖的顯示 */ + (instancetype)appViewWithAppInfo:(AppInfo *)appInfo; // 自定義視圖中顯示的數(shù)據(jù)來源是數(shù)據(jù)模型 // 使用模型設(shè)置自定義視圖的顯示 @property (nonatomic, strong) AppInfo *appInfo; @end
模型View:AppView.m
#import "AppView.h"
#import "AppInfo.h"
@interface AppView()
@property (weak, nonatomic) IBOutlet UIImageView *iconView;
@property (weak, nonatomic) IBOutlet UILabel *label;
@end
@implementation AppView
//實(shí)例化xib
+ (instancetype)appView
{
return [[[NSBundle mainBundle] loadNibNamed:@"AppView" owner:nil options:nil] lastObject];
}
//根據(jù)模型實(shí)例化xib
+ (instancetype)appViewWithAppInfo:(AppInfo *)appInfo
{
// 1. 實(shí)例化一個(gè)視圖
AppView *view = [self appView];
// 2. 設(shè)置視圖的顯示
view.appInfo = appInfo;//包含,AppView有appInfo的屬性
// 3. 返回視圖
return view;
}
/**
利用setter方法設(shè)置視圖的界面顯示
*/
- (void)setAppInfo:(AppInfo *)appInfo
{
_appInfo = appInfo;
self.label.text = appInfo.name;
self.iconView.image = appInfo.image;
}
/** 按鈕監(jiān)聽方法 */
- (IBAction)click:(UIButton *)button
{
// 添加一個(gè)UILabel到界面上
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(80, 400, 160, 40)];
// 數(shù)值是0表示黑色,1表示純白;alpha表示透明度
label.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.2];
label.text = self.appInfo.name;
label.textAlignment = NSTextAlignmentCenter;
// self.superview就是視圖控制器中的self.view
[self.superview addSubview:label];
// 動(dòng)畫效果
label.alpha = 0.0;
// 禁用按鈕,如果點(diǎn)擊了按鈕以后就禁用按鈕
button.enabled = NO;
// 動(dòng)畫結(jié)束之后刪除
[UIView animateWithDuration:1.0f animations:^{
// 要修改的動(dòng)畫屬性
label.alpha = 1.0;
} completion:^(BOOL finished) {
[UIView animateWithDuration:1.0 animations:^{
label.alpha = 0.0;
} completion:^(BOOL finished)
[label removeFromSuperview];
}];
}];
}
@end
ViewController.m
#import "ViewController.h"
#import "AppInfo.h"
#import "AppView.h"
#define kAppViewW 80
#define kAppViewH 90
#define kColCount 3
#define kStartY 20
@interface ViewController ()
/** 應(yīng)用程序列表 */
@property (nonatomic, strong) NSArray *appList;
@end
@implementation ViewController
- (NSArray *)appList
{
if (_appList == nil) {
_appList = [AppInfo appList];
}
return _appList;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// 搭建九宮格
// 320 - 3 * 80 = 80 / 4 = 20
CGFloat marginX = (self.view.bounds.size.width - kColCount * kAppViewW) / (kColCount + 1);
CGFloat marginY = 10;
for (int i = 0; i < self.appList.count; i++) {
// 行
int row = i / kColCount;
// 列
int col = i % kColCount;
CGFloat x = marginX + col * (marginX + kAppViewW);
CGFloat y = kStartY + marginY + row * (marginY + kAppViewH);
//加載第i個(gè)xib視圖
AppView *appView = [AppView appViewWithAppInfo:self.appList[i]];
// 設(shè)置視圖位置
appView.frame = CGRectMake(x, y, kAppViewW, kAppViewH);
[self.view addSubview:appView];
}
}
5. 本項(xiàng)目必須掌握的代碼段
字典轉(zhuǎn)模型
- (instancetype)initWithDict:(NSDictionary *)dict
{
self = [super init];
if (self) {
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
+ (instancetype)appInfoWithDict:(NSDictionary *)dict
{
return [[self alloc] initWithDict:dict];
}
+ (NSArray *)appList
{
NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"app.plist" ofType:nil]];
// 創(chuàng)建一個(gè)臨時(shí)可變數(shù)組
NSMutableArray *arrayM = [NSMutableArray array];
// 遍歷數(shù)組,依次轉(zhuǎn)換模型
for (NSDictionary *dict in array) {
[arrayM addObject:[AppInfo appInfoWithDict:dict]];
}
return arrayM;
}
KVC
[self setValuesForKeysWithDictionary:dict];
6. 筆記
字典轉(zhuǎn)模型:
plist文件有多個(gè)字典,把字典的元素轉(zhuǎn)換成模型類對(duì)象的成員變量,將模型類對(duì)象放入數(shù)組中 模型的屬性名稱和plist文件中的key名稱必須一致
如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
iOS實(shí)現(xiàn)簡易的導(dǎo)航欄顏色漸變實(shí)例代碼
很多APP 都有導(dǎo)航欄顏色漸變的效果,下面這篇文章主要給大家介紹了關(guān)于iOS如何實(shí)現(xiàn)簡易的導(dǎo)航欄顏色漸變效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧2018-10-10
IOS獲取當(dāng)前版本號(hào) Bundle ID等信息的方法詳解
這篇文章主要介紹了IOS獲取當(dāng)前版本號(hào) Bundle ID等信息的方法詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12
iOS中自帶超強(qiáng)中文分詞器的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于iOS中自帶超強(qiáng)中文分詞器的實(shí)現(xiàn)方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-06-06
超全的iOS各種設(shè)備信息獲取方法總結(jié)(包括iPhone8/iPhone X)
這篇文章主要給大家介紹了關(guān)于iOS各種設(shè)備信息獲取方法,iPhone8/iPhone X的后驅(qū)詳細(xì)信息也已更新,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12
iOS開發(fā)中對(duì)于攝像頭的一些基本使用方法分享
這篇文章主要介紹了iOS開發(fā)中對(duì)于攝像頭的一些基本使用方法分享,包括判斷攝像頭是否可用的方法,需要的朋友可以參考下2015-10-10
總結(jié)iOS App開發(fā)中控制屏幕旋轉(zhuǎn)的幾種方式
這篇文章主要介紹了iOS app開發(fā)中控制屏幕旋轉(zhuǎn)的方法總結(jié),分為自動(dòng)旋轉(zhuǎn)和手動(dòng)旋轉(zhuǎn)以及強(qiáng)制旋轉(zhuǎn)三種情況,代碼為Objective-C語言,需要的朋友可以參考下2016-02-02

