iOS實戰01,ios實戰

來源:互聯網
上載者:User

iOS實戰01,ios實戰

  去年放假之前大概完成了新浪微博項目,到現在也忘得差不多了,打算在重新寫一遍。之前的一些筆記在新浪的部落格SleenXiu,在這主要是把新浪微博以隨筆的形式寫在這,方便以後的複習。

  先看看之前主要完成的幾個點,秒拍視頻串連:http://video.weibo.com/show?fid=1034:32ed06b90b1bba7ba25cc546a06fa949

  今天開始重新寫一遍,在這記下來。

  經典架構的搭建,所謂經典架構就是最底層為UITabBarController,管理幾個UINavigationController,不同的UINavigationController又管理相應的VC。

  1.在appdelegate中完成初步的架構搭建,我們需要一個自訂的UITabBarController,並成為window的根控制器。

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2     // Override point for customization after application launch. 3      4     // 設定視窗 5     self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 6      7     // 初始化自己的tabbarController 8     SVTabbarController *tabbar = [[SVTabbarController alloc] init]; 9     10     // 為視窗添加根控制器,11     self.window.rootViewController = tabbar;12     13     // 顯示視窗14     [self.window makeKeyAndVisible];15     16     return YES;17 }

  2.對檔案進行分組,按照模組分,下面的MVC結構。

1 // 添加子控制器 2 - (void)addController 3 { 4 SVHomeController *homeVC = [[SVHomeController alloc] init]; 5 SVNavigationController *homeNav = [[SVNavigationController alloc] initWithRootViewController:homeVC]; 6 homeVC.title = @"首頁"; 7 homeVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_home_os7"]; 8 homeVC.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_home_selected_os7"]; 9 [self addChildViewController:homeNav];10 11 SVHomeController *messageVC = [[SVHomeController alloc] init];12 SVNavigationController *messageNav = [[SVNavigationController alloc] initWithRootViewController:messageVC];13 messageVC.title = @"訊息";14 messageVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_message_center_os7"];15 messageVC.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_message_center_selected_os7"];16 [self addChildViewController:messageNav];17 18 SVHomeController *discoverVC = [[SVHomeController alloc] init];19 SVNavigationController *discoverNav = [[SVNavigationController alloc] initWithRootViewController:discoverVC];20 discoverVC.title = @"發現";21 discoverVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_discover_os7"];22 discoverVC.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_discover_selected_os7"];23 [self addChildViewController:discoverNav];24 25 SVHomeController *meVC = [[SVHomeController alloc] init];26 SVNavigationController *meNav = [[SVNavigationController alloc] initWithRootViewController:meVC];27 meVC.title = @"我";28 meVC.tabBarItem.image = [UIImage imageNamed:@"tabbar_profile_os7"];29 meVC.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_profile_selected_os7"];30 [self addChildViewController:meNav];31 }

基本效果已經有了

  4.tabbar的導航不是想要的效果,刪除系統內建的tabbaritem,添加自訂tabbar,[self addtabbar]。

 1 // 移除系統的tabbar,view將要出現的時候刪除掉原有tabbar上所有的item 2 - (void)viewWillAppear:(BOOL)animated 3 { 4     [super viewWillAppear:animated]; 5      6     for (UIView *child in self.tabBar.subviews) { 7         if ([child isKindOfClass:[UIColor class]]) { 8             [child removeFromSuperview]; 9         }10     }11 }12 // 增加自己的tabbar13 - (void)addTabbar14 {15     // 初始化自己的tabbar16     SVTabbar *tabbar = [[SVTabbar alloc] initWithFrame:self.tabBar.bounds];17     // 儲存自己的tabbar18     self.mytabbar = tabbar;19     // 添加自己的tabbar20     [self.tabBar addSubview:tabbar];21     // 為tabbar添加代理22     tabbar.delegate = self;23     24 }

  5.封裝自己的tabbar,添加控制項,自訂按鈕item,完成跳轉

  5-1.添加控制項,根據有多少個控制器添加相應個數的btn,而btn的相應值通過item進行傳遞,在tabbar中提供- (void)addBtnWithItem:(UITabbarItem)item;方法添加自己的item(btn)
 1 - (void)addBtnWithItem:(UITabBarItem *)item 2 { 3     // 初始化btn 4     SVTabbarButton *btn = [[SVTabbarButton alloc] init]; 5     // 儲存btn 6     [self.tabbarBtns addObject:btn]; 7     // 賦值btn 8     btn.item = item; 9     // 添加btn10     [self addSubview:btn];11     // 為按鈕綁定點擊事件12     [btn addTarget:self action:@selector(selectedBtn:) forControlEvents:UIControlEventTouchUpInside];13     // 預設選中第一個14     if (self.tabbarBtns.count == 1) {15         [self selectedBtn:btn];16     }17 }18 // 按鈕的點擊事件19 - (void)selectedBtn:(SVTabbarButton *)btn20 {21     // 通知代理22     if ([self.delegate respondsToSelector:@selector(tabbar:didSelectBtnFrom:to:)]) {23         [self.delegate tabbar:self didSelectBtnFrom:(int)self.currentBtn.tag to:(int)btn.tag];24     }25     // 設定tabbar的選中26     self.currentBtn.selected = NO;27     btn.selected = YES;28     self.currentBtn = btn;29 }30 // 布局按鈕31 - (void)layoutSubviews32 {33     self.subviews[0].center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);34     35     for (int index = 0; index<self.tabbarBtns.count; index++) {36         SVTabbarButton *btn = self.tabbarBtns[index];37         38         CGFloat bW = self.frame.size.width/self.subviews.count;39         CGFloat bH = self.frame.size.height;40         CGFloat bX = index * bW;41         CGFloat bY = 0;42         if (index>1) {43             bX += bW;44         }45         btn.frame = CGRectMake(bX, bY, bW, bH);46         47         btn.tag = index;48     }49 }
  5-2.自訂按鈕,重新布局按鈕的位置,並對按鈕進行賦值資料,有四個控制器,所以重構添加控制器的方法,根據不同的控制器為相應屬性賦值。
 1 // 重新布局btn內部的控制項得到想要的效果 2 - (instancetype)initWithFrame:(CGRect)frame 3 { 4     if (self = [super initWithFrame:frame]) { 5         // 圖片置中顯示 6         self.imageView.contentMode = UIViewContentModeCenter; 7         // 文本置中顯示 8         self.titleLabel.textAlignment = NSTextAlignmentCenter; 9         // 設定字型大小10         [self.titleLabel setFont:[UIFont systemFontOfSize:13]];11         12         // 設定字型顏色13         [self setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];14         [self setTitleColor:[UIColor orangeColor] forState:UIControlStateSelected];15     }16     return self;17 }18 // 重寫item的set方法,對btn進行賦值19 - (void)setItem:(UITabBarItem *)item20 {21     _item = item;22     23     [self setTitle:item.title forState:UIControlStateNormal];24     [self setImage:item.image forState:UIControlStateNormal];25     [self setImage:item.selectedImage forState:UIControlStateSelected];26 }27 // 內部圖片的位置28 - (CGRect)imageRectForContentRect:(CGRect)contentRect29 {30     CGFloat imageW = contentRect.size.width;31     CGFloat imageH = contentRect.size.height * 0.6;32     return CGRectMake(0, 0, imageW, imageH);33     34 }35 // 內部文字的位置36 - (CGRect)titleRectForContentRect:(CGRect)contentRect37 {38     CGFloat titleY = contentRect.size.height * 0.6;39     CGFloat titleW = contentRect.size.width;40     CGFloat titleH = contentRect.size.height - titleY;41     return CGRectMake(0, titleY, titleW, titleH);42 }43 // 去掉按鈕的高亮狀態44 - (void)setHighlighted:(BOOL)highlighted {}
  5-3.完成點擊按鈕控制器的跳轉,取消按鈕高亮狀態,預設選中第一的按鈕,按鈕綁定點擊事件,為自訂的tabbar寫代理,監聽按鈕點擊跳轉控制器
1 @protocol SVTabbarDelegate <NSObject>2 @optional3 // 當tabbar上的按鈕點擊的時候會調用4 - (void)tabbar:(SVTabbar *)tabbar didSelectBtnFrom:(int)from to:(int)to;5 @end
1 #pragma mark tabbar的代理方法2 - (void)tabbar:(SVTabbar *)tabbar didSelectBtnFrom:(int)from to:(int)to3 {4     self.selectedIndex = to;5 }
  6.添加中間的加號按鈕,位置固定所以直接一次設定就好
 1 - (instancetype)initWithFrame:(CGRect)frame 2 { 3     if (self = [super initWithFrame:frame]) { 4         UIButton *plusBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 5          6         [plusBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_os7"] forState:UIControlStateNormal]; 7         [plusBtn setBackgroundImage:[UIImage imageNamed:@"tabbar_compose_button_highlighted_os7"] forState:UIControlStateHighlighted]; 8         [plusBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_os7"] forState:UIControlStateNormal]; 9         [plusBtn setImage:[UIImage imageNamed:@"tabbar_compose_icon_add_highlighted_os7"] forState:UIControlStateHighlighted];10         plusBtn.frame = CGRectMake(0, 0, plusBtn.currentBackgroundImage.size.width, plusBtn.currentBackgroundImage.size.height);11         12         [self addSubview:plusBtn];13     }14     return self;15 }

  今天就先做這一點,基本大的架構就已經好了,明天修一下細節。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.