iOS 인터넷 뉴스 스크롤 내 비게 이 션 효과
8090 단어 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
상기 코드 는 왕 이 뉴스 가 굴 러 가 는 네 비게 이 션 바 를 실현 할 수 있 습 니 다.이 기능 은 다른 곳 에서 사용 할 수 있 기 때문에 이 기능 을 추출 하여 다른 컨트롤 러 가 통합 되 고 아직 하지 않 은 것 이 좋 습 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.