iOS 인터넷 뉴스 스크롤 내 비게 이 션 효과

본 논문 의 사례 는 iOS 스크롤 네 비게 이 션 효과 가 보 여 주 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
실현 효과
효과:서로 다른 항목 을 선택 하고 아래 에 서로 다른 보기 가 나타 나 면 항목 을 굴 릴 수 있 습 니 다.아래 보기 도 스크롤 할 수 있 습 니 다.스크롤 할 때 위 에 해당 하 는 항목 은 빨간색 으로 선택 하 십시오.
스크롤 하 는 내 비게 이 션 바 는 제목 스크롤 보기(UIScrollView),내용 스크롤 보기(UIScrollView)두 부분 을 포함 합 니 다.

구현 코드
1.먼저 Main.storyboard 실현

2.여러 개의 키 컨트롤 러 만 들 기:톱,과학기술,자동차,스포츠,영상,이미지,핫 이 슈

//   ViewController,               ,          
#import <UIKit/UIKit.h>
@interface TopLineViewController : UIViewController

@end
//----------------------------------------------------------------
#import "TopLineViewController.h"
@interface TopLineViewController ()

@end

@implementation TopLineViewController
- (void)viewDidLoad {
 [super viewDidLoad];

 self.view.backgroundColor = [UIColor blackColor];
}
@end
Main.storyboard 에 대응 하 는 보기 컨트롤 러 ViewController 구현

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController

@end
//----------------------------------------------------------------
#import "ViewController.h"
#import "TopLineViewController.h"
#import "TechnologyViewController.h"
#import "CarViewController.h"
#import "SportsViewController.h"
#import "VideoViewController.h"
#import "ImageViewController.h"
#import "HotViewController.h"

#define ScreenWidth [UIScreen mainScreen].bounds.size.width
#define ScreenHeight [UIScreen mainScreen].bounds.size.height

@interface ViewController () <UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *titleScrollView;

@property (weak, nonatomic) IBOutlet UIScrollView *contentScrollView;

@property (strong, nonatomic) NSMutableArray *buttons;
@property (strong, nonatomic) UIButton *selectedButton;

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
 self.navigationItem.title = @"    ";
 // 1.              
 [self initButtonsForButtonScrollView];


}


- (void) initButtonsForButtonScrollView {
 //        
 [self initChildViewControllers];
 CGFloat buttonWidth = 100;
 CGFloat buttonHeight = 40;
 NSInteger childViewControllerCount = self.childViewControllers.count;
 for (NSInteger i = 0; i < childViewControllerCount; i++) {
  UIViewController *childViewController = self.childViewControllers[i];
  UIButton *titleButton = [UIButton buttonWithType:UIButtonTypeCustom];
  titleButton.tag = i;
  CGFloat x = i * buttonWidth;
  titleButton.frame = CGRectMake(x, 0, buttonWidth, buttonHeight);
  [titleButton setTitle:childViewController.title forState:UIControlStateNormal];
  [titleButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  [titleButton addTarget:self action:@selector(titleButtonOnClick:) forControlEvents:UIControlEventTouchUpInside];
  [self.titleScrollView addSubview:titleButton];

  [self.buttons addObject:titleButton];
 }

 self.titleScrollView.contentSize = CGSizeMake(buttonWidth * childViewControllerCount, 0);
 self.titleScrollView.showsHorizontalScrollIndicator = NO;
 self.titleScrollView.bounces = NO;

 self.contentScrollView.contentSize = CGSizeMake(ScreenWidth * childViewControllerCount, 0);
 self.contentScrollView.showsHorizontalScrollIndicator = NO;
 self.contentScrollView.pagingEnabled = YES;
 self.contentScrollView.delegate = self;

 //         
 self.automaticallyAdjustsScrollViewInsets = NO;

 //            
 [self titleButtonOnClick:self.buttons[0]];
}


- (void)titleButtonOnClick:(UIButton *)button {
 // 1.     
 [self selectingButton:button];

 // 2.      
 [self addViewToContentScrollView:button];
}

- (void)selectingButton:(UIButton *)button {
 [_selectedButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
 _selectedButton.transform = CGAffineTransformMakeScale(1.0, 1.0);
 [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
 button.transform = CGAffineTransformMakeScale(1.3, 1.3); //       ,    ,       
 _selectedButton = button;

 //               
 CGFloat offsetX = button.frame.origin.x - ScreenWidth * 0.5;
 CGFloat maxOffsetX = self.titleScrollView.contentSize.width - ScreenWidth;

 if (offsetX < 0) {
  offsetX = 0;
 } else if (offsetX > maxOffsetX) {
  offsetX = maxOffsetX;
 }

 [self.titleScrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
}

- (void)addViewToContentScrollView:(UIButton *)button {
 NSInteger i = button.tag;
 UIViewController *childViewController = self.childViewControllers[i];
 CGFloat x = i * ScreenWidth;

 //       
 if (childViewController.view.subviews != nil) {
  childViewController.view.frame = CGRectMake(x, 0, ScreenWidth, ScreenHeight);
  [self.contentScrollView addSubview:childViewController.view];
 }
 self.contentScrollView.contentOffset = CGPointMake(x, 0);
}

#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {


}

//      ,                      
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
 NSInteger i = self.contentScrollView.contentOffset.x / ScreenWidth;
 [self addViewToContentScrollView:_buttons[i]];

 //                   
 [self selectingButton:_buttons[i]];
}

- (void)initChildViewControllers {
 // 0.  
 TopLineViewController * topViewController = [[TopLineViewController alloc] init];
 topViewController.title = @"  ";
 [self addChildViewController:topViewController];

 // 1.  
 TechnologyViewController * technologyViewController = [[TechnologyViewController alloc] init];
 technologyViewController.title = @"  ";
 [self addChildViewController:technologyViewController];

 // 2.  
 CarViewController * carViewController = [[CarViewController alloc] init];
 carViewController.title = @"  ";
 [self addChildViewController:carViewController];

 // 3.  
 SportsViewController * sportsViewController = [[SportsViewController alloc] init];
 sportsViewController.title = @"  ";
 [self addChildViewController:sportsViewController];

 // 4.  
 VideoViewController * videoViewController = [[VideoViewController alloc] init];
 videoViewController.title = @"  ";
 [self addChildViewController:videoViewController];

 // 5.  
 ImageViewController * imageViewController = [[ImageViewController alloc] init];
 imageViewController.title = @"  ";
 [self addChildViewController:imageViewController];

 // 6.  
 HotViewController * hotViewController = [[HotViewController alloc] init];
 hotViewController.title = @"  ";
 [self addChildViewController:hotViewController];
}

- (NSMutableArray *)buttons {
 if (_buttons == nil) {
  _buttons = [NSMutableArray array];
 }

 return _buttons;
}
@end
상기 코드 는 왕 이 뉴스 가 굴 러 가 는 네 비게 이 션 바 를 실현 할 수 있 습 니 다.이 기능 은 다른 곳 에서 사용 할 수 있 기 때문에 이 기능 을 추출 하여 다른 컨트롤 러 가 통합 되 고 아직 하지 않 은 것 이 좋 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기