你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS項目開發-密碼生成器

IOS項目開發-密碼生成器

編輯:IOS開發綜合
概要 通過仿密碼生成器軟件,練習IOS開發技術,加深對MVC設計模式的理解,對以前學習的點點滴滴復習+掌握。因為看到的例子是用拖拉界面實現的, 而為了實現和更好地學習IOS開發,我采用純編碼的方式來開發,所以相對拖拉會比較慢。例子裡面雖然有專門的布局方法,但是沒有處理屏幕方向發生變化時的事件,所以橫屏還是有問題的。此外,對於每個界面都有一個對應的控制類,在UIView類裡面實現UI元素的添加布局,在控制器裡面實現事件、邏輯的處理,以便符合MVC的設計模式。   結果展示     主要技術點 程序主要有兩個界面:主頁面(MainView)和幫助頁面(InfomationView),這兩個視圖都是以程序的子視圖的方式顯示,兩者互斥出現 在主頁面顯示的時候,程序的根視圖有一個信息按鈕,通過該按鈕可導航到幫助頁面,而在幫助頁面時,程序的根視圖頂部有一個導航欄,通過導航欄的左右按鈕都可以返回到主頁面。 頁面切換時的動畫采用UIView動畫,其基本用法形如下所示:   [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1.0f]; [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES]; [self removeMainView]; [UIView commitAnimations]; 一個UINavigationItem分為三部分:左按鈕,標題文字,右按鈕,主要用法形如:   UINavigationBar* bar = [[UINavigationBar alloc] init]; [self.view insertSubview:bar aboveSubview:self.infomationViewController.view];   UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"About Password Generator"]; [bar pushNavigationItem:item animated:YES];   UIBarButtonItem* leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(SwitchView)]; UIBarButtonItem* rightBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(SwitchView)];   item.leftBarButtonItem = leftBarButton; item.rightBarButtonItem = rightBarButton; 由於UIView的類裡面初始化的時候只是添加了控件,而沒有對控件的布局進行初始化,而布局初始化又是類方法裡面的reLayout,所以為了保證顯示前能夠正確調用布局,我在視圖對應類的控制器類裡面重寫了方法- (void) viewWillAppear:(BOOL)animated,在該方法裡面調用了布局方法,如下所示:   - (void) viewWillAppear:(BOOL)animated {     if(self.autolayout)     {         [self.view reLayout];     }     [super viewWillAppear:animated]; } 由於經驗不夠,本來想想就能完成的事情做起來還是出現亂七八糟的問題,首先昨晚花了一個多小時一直寫代碼,然後測試,居然沒有畫面。調了下,不知道是什麼原因。然後今天新建了個工程,一邊寫,一邊看效果,零零散散,總算完成了。看來..不能一口吃成胖子,也不能光說不練。   主要代碼 程序主控制器   // //  ViewController.m //  PasswordGenerator // //  Created by arbboter on 14/12/23. //  Copyright (c) 2014ๅนด arbboter. All rights reserved. //   #import "ViewController.h" #import "MainViewController.h" #import "InfomationViewController.h"   @interface ViewController ()   @property(nonatomic, retain) UIButton* infomationButton; @property(nonatomic, retain) MainViewController* mainViewController; @property(nonatomic, retain) InfomationViewController* infomationViewController; @property (nonatomic, retain) UINavigationBar* navagationBar; @end   @implementation ViewController   - (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view, typically from a nib.       [self SwitchView]; }   - (void) onInfomationView {       InfomationViewController* viewController = [[InfomationViewController alloc] init];     self.infomationViewController = viewController;     [self.view addSubview:viewController.view];     [viewController release];       UINavigationBar* bar = [[UINavigationBar alloc] init];     [self.view insertSubview:bar aboveSubview:self.infomationViewController.view];     self.navagationBar = bar;     [bar release];       UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"About Password Generator"];     [bar pushNavigationItem:item animated:YES];     UIBarButtonItem* leftBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(SwitchView)];     UIBarButtonItem* rightBarButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain target:self action:@selector(SwitchView)];       item.leftBarButtonItem = leftBarButton;     item.rightBarButtonItem = rightBarButton;       [item release];     [leftBarButton release];     [rightBarButton release]; }   - (void) removeInfomationView {     [_infomationViewController.view removeFromSuperview];     [_infomationViewController release];     _infomationViewController = nil;       [_navagationBar removeFromSuperview];     [_navagationBar release];     _navagationBar = nil;   }   - (void) SwitchView {     [UIView beginAnimations:nil context:nil];     [UIView setAnimationDuration:1.0f];       if ([self.infomationButton superview])     {         [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];         [self removeMainView];         [UIView commitAnimations];         [self onInfomationView];     }     else     {         [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];         [self removeInfomationView];         [UIView commitAnimations];         [self onMainView];     }     [self reLayout]; }   - (void) removeMainView {     [_infomationButton removeFromSuperview];     [_infomationButton release];     _infomationButton = nil;     [_mainViewController.view removeFromSuperview];     [_mainViewController release];     _mainViewController = nil; }   - (void) onMainView {     UIButton* button = [UIButton buttonWithType:UIButtonTypeInfoDark];     [self.view addSubview:button];     [button addTarget:self action:@selector(SwitchView) forControlEvents:UIControlEventTouchUpInside];     self.infomationButton = button;       MainViewController* viewController = [[MainViewController alloc] init];     [self.view insertSubview:viewController.view belowSubview:self.infomationButton];     self.mainViewController = viewController;     [viewController release]; }   - (void) reLayout {     CGPoint origin = self.view.frame.origin;     CGSize size = self.view.frame.size;       CGFloat w = 40;     CGFloat h = 40;     CGFloat yMargin = 10;     CGFloat xMargin = 10;     CGFloat x = origin.x + size.width-2*xMargin-w;     CGFloat y = origin.y + size.height - 2*yMargin - h;       _navagationBar.frame = CGRectMake(origin.x, origin.y+20, size.width, 40);     _infomationButton.frame = CGRectMake(x, y, w, h); }   -(void) viewWillAppear:(BOOL)animated {     [self reLayout];     [super viewWillAppear:animated]; }   - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. }   - (void) dealloc {     [self removeInfomationView];     [self removeMainView];     [super dealloc]; }   @end 幫助頁面視圖類   // //  InfomationView.m //  PasswordGenerator // //  Created by arbboter on 14/12/23. //  Copyright (c) 2014年 arbboter. All rights reserved. //   #import "InfomationView.h"   @interface InfomationView ()   @property (nonatomic, retain) UILabel* logoLabel; @property (nonatomic, retain) UIImageView* bkImageView;   @end   @implementation InfomationView   - (id)init {     self = [super init];     if(self == nil)     {         return self;     }       UILabel* label = nil;     label = [[UILabel alloc] init];     label.text = @"Copyright (c) 2014年 arbboter.";     label.textAlignment = NSTextAlignmentCenter;     self.logoLabel = label;     [self addSubview:label];     [label release];       UIImageView* imageView = [[UIImageView alloc] init];     imageView.image = [UIImage imageNamed:@"bk.jpg"];     imageView.contentMode = UIViewContentModeScaleAspectFit;     self.bkImageView = imageView;     [self insertSubview:imageView belowSubview:self.logoLabel];     [imageView release];       return self; }   - (void) reLayout {     CGPoint origin = self.frame.origin;     CGSize size = self.frame.size;       CGFloat yMargin = 10;     CGFloat xMargin = 10;     CGFloat w = size.width-2*xMargin;     CGFloat h = 40;     CGFloat x = origin.x + xMargin;     CGFloat y = origin.y + size.height - 2*yMargin - h;       _bkImageView.frame = self.frame;     _logoLabel.frame = CGRectMake(x, y, w, h);   }   - (void) dealloc {     [_bkImageView release];     [_logoLabel release];     [super dealloc]; } @end
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved