DLCustomSlideView.m 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //
  2. // DLCustomSlideView.m
  3. // DLSlideViewDemo
  4. //
  5. // Created by Dongle Su on 15-2-12.
  6. // Copyright (c) 2015年 dongle. All rights reserved.
  7. //
  8. #import "DLCustomSlideView.h"
  9. #define kDefaultTabbarBottomSpacing 0
  10. #define kDefaultCacheCount 4
  11. @implementation DLCustomSlideView{
  12. DLSlideView *slideView_;
  13. }
  14. - (void)commonInit{
  15. self.tabbarBottomSpacing = kDefaultTabbarBottomSpacing;
  16. }
  17. - (id)initWithCoder:(NSCoder *)aDecoder{
  18. if (self = [super initWithCoder:aDecoder]) {
  19. [self commonInit];
  20. }
  21. return self;
  22. }
  23. - (id)initWithFrame:(CGRect)frame{
  24. if (self = [super initWithFrame:frame]) {
  25. [self commonInit];
  26. }
  27. return self;
  28. }
  29. - (void)setup{
  30. self.tabbar.delegate = self;
  31. [self addSubview:self.tabbar];
  32. slideView_ = [[DLSlideView alloc] initWithFrame:CGRectMake(0, self.tabbar.frame.size.height+self.tabbarBottomSpacing, self.bounds.size.width, self.bounds.size.height-self.tabbar.frame.size.height-self.tabbarBottomSpacing)];
  33. slideView_.delegate = self;
  34. slideView_.dataSource = self;
  35. slideView_.baseViewController = self.baseViewController;
  36. [self addSubview:slideView_];
  37. }
  38. - (void)layoutSubviews{
  39. [super layoutSubviews];
  40. [self layoutBarAndSlide];
  41. }
  42. - (void)layoutBarAndSlide{
  43. self.tabbar.frame = CGRectMake(0, 0, CGRectGetWidth(self.tabbar.bounds), self.tabbar.frame.size.height);
  44. slideView_.frame = CGRectMake(0, self.tabbar.frame.size.height+self.tabbarBottomSpacing, CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)-self.tabbar.frame.size.height-self.tabbarBottomSpacing);
  45. }
  46. - (void)setBaseViewController:(UIViewController *)baseViewController{
  47. slideView_.baseViewController = baseViewController;
  48. _baseViewController = baseViewController;
  49. }
  50. - (void)setSelectedIndex:(NSInteger)selectedIndex{
  51. _selectedIndex = selectedIndex;
  52. [slideView_ setSelectedIndex:selectedIndex];
  53. [self.tabbar setSelectedIndex:selectedIndex];
  54. }
  55. - (void)DLSlideTabbar:(id)sender selectAt:(NSInteger)index{
  56. [slideView_ setSelectedIndex:index];
  57. }
  58. - (NSInteger)numberOfControllersInDLSlideView:(DLSlideView *)sender{
  59. return [self.delegate numberOfTabsInDLCustomSlideView:self];
  60. }
  61. - (UIViewController *)DLSlideView:(DLSlideView *)sender controllerAt:(NSInteger)index{
  62. NSString *key = [NSString stringWithFormat:@"%ld", (long)index];
  63. if ([self.cache objectForKey:key]) {
  64. return [self.cache objectForKey:key];
  65. }
  66. else{
  67. UIViewController *ctrl = [self.delegate DLCustomSlideView:self controllerAt:index];
  68. [self.cache setObject:ctrl forKey:key];
  69. return ctrl;
  70. }
  71. }
  72. - (void)DLSlideView:(DLSlideView *)slide switchingFrom:(NSInteger)oldIndex to:(NSInteger)toIndex percent:(float)percent{
  73. [self.tabbar switchingFrom:oldIndex to:toIndex percent:percent];
  74. }
  75. - (void)DLSlideView:(DLSlideView *)slide didSwitchTo:(NSInteger)index{
  76. _selectedIndex = index;
  77. [self.tabbar setSelectedIndex:index];
  78. if (self.delegate && [self.delegate respondsToSelector:@selector(DLCustomSlideView:didSelectedAt:)]) {
  79. [self.delegate DLCustomSlideView:self didSelectedAt:index];
  80. }
  81. }
  82. - (void)DLSlideView:(DLSlideView *)slide switchCanceled:(NSInteger)oldIndex{
  83. [self.tabbar setSelectedIndex:oldIndex];
  84. }
  85. @end