odysseasg
odysseasg

Reputation: 121

Make Slides to go to next Page

My application starts by showing some Intro slides. 4 in total and in the last one, a button is used to close the slides and to go to the main page.

What I wish to make is to remove the button, and to make the last slide slidable. The user continues to slide to the right, and at the end it lands to the main page.

But don't know how to acheave that.

Here is the definition of

@interface IntroSlideViewController ()<ABCIntroViewDelegate>
@property ABCIntroView *introView;

@end

@implementation IntroSlideViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}
-(void)viewDidAppear:(BOOL)animated{
    /***************Page Control**************/
    self.introView = [[ABCIntroView alloc] initWithFrame:self.view.frame];
    self.introView.delegate = self;
    self.introView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:1.000];
    [self.view addSubview:self.introView];
    /***************************************/
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (void)onDoneButtonPressed {
    [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:FIRSTTIME_LOGIN];
    InitScreenViewController* initVc = [self.storyboard instantiateViewControllerWithIdentifier:@"initScreenViewController"];
    UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:initVc];
    [navVC setNavigationBarHidden:true];
    [UIView transitionWithView:[AppDelegate getShareInstance].window duration:0.1f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        [AppDelegate getShareInstance].window.rootViewController = navVC;
    }completion:nil];
}
@end

And the parent class ABCIntroViewDelegate:

@interface ABCIntroView () <UIScrollViewDelegate>
@property (strong, nonatomic) UIScrollView *scrollView;
@property (strong, nonatomic) UIPageControl *pageControl;
@property (strong, nonatomic) UIButton *doneButton;
@property (strong, nonatomic) UIView *viewOne;
@property (strong, nonatomic) UIView *viewTwo;
@property (strong, nonatomic) UIView *viewThree;
@property (strong, nonatomic) UIView *viewFour;
@property (strong, nonatomic) UIView *viewFive;
@end

@implementation ABCIntroView

- (instancetype)initWithFrame:(CGRect)frame{
    self = [super initWithFrame:frame];
    if(self){
        [self addSubview:self.scrollView];
        [self addSubview:self.pageControl];
        [self.scrollView addSubview:self.viewOne];
        [self.scrollView addSubview:self.viewTwo];
        [self.scrollView addSubview:self.viewThree];
        [self.scrollView addSubview:self.viewFour];
        self.scrollView.showsHorizontalScrollIndicator = NO;
        self.scrollView.showsVerticalScrollIndicator = NO;
        //Done Button
        //[self addSubview:self.doneButton];
    }
    return self;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat pageWidth = CGRectGetWidth(self.bounds);
    CGFloat pageFraction = self.scrollView.contentOffset.x / pageWidth;
    self.pageControl.currentPage = roundf(pageFraction);
}
-(UIView *)viewOne {
    if (!_viewOne) {
        _viewOne = [[UIView alloc] initWithFrame:self.frame];
        UIImageView *imageview;
        imageview = [[UIImageView alloc] initWithFrame:self.frame];
        imageview.image = [UIImage imageNamed:@"intro_slide_0"];
        [_viewOne addSubview:imageview];
    }
    return _viewOne;
}
-(UIView *)viewTwo {

    if (!_viewTwo) {
        CGFloat originWidth = self.frame.size.width;
        CGFloat originHeight = self.frame.size.height;
        _viewTwo = [[UIView alloc] initWithFrame:CGRectMake(originWidth, 0, originWidth, originHeight)];
        UIImageView *imageviewTwo;
        imageviewTwo = [[UIImageView alloc] initWithFrame:self.frame];
        imageviewTwo.image = [UIImage imageNamed:@"intro_slide_1"];
        [_viewTwo addSubview:imageviewTwo];
    }
    return _viewTwo;
}
-(UIView *)viewThree{
    if (!_viewThree) {
        CGFloat originWidth = self.frame.size.width;
        CGFloat originHeight = self.frame.size.height;
        _viewThree = [[UIView alloc] initWithFrame:CGRectMake(originWidth*2, 0, originWidth, originHeight)];
        UIImageView *imageviewThree;
        imageviewThree = [[UIImageView alloc] initWithFrame:self.frame];
        imageviewThree.image = [UIImage imageNamed:@"intro_slide_2"];
        [_viewThree addSubview:imageviewThree];
    }
    return _viewThree;
}
-(UIView *)viewFour {
    if (!_viewFour) {
        CGFloat originWidth = self.frame.size.width;
        CGFloat originHeight = self.frame.size.height;
        _viewFour = [[UIView alloc] initWithFrame:CGRectMake(originWidth*3, 0, originWidth, originHeight)];
        UIImageView *imageviewFour;
        imageviewFour = [[UIImageView alloc] initWithFrame:self.frame];
        imageviewFour.image = [UIImage imageNamed:@"intro_slide_3"];
        [_viewFour addSubview:imageviewFour];
        UIButton *btnDone = [[UIButton alloc] initWithFrame:CGRectMake(30, self.frame.size.height - 130, self.frame.size.width-60, 50)];
        [btnDone setImage:[UIImage imageNamed:@"slide_3_button_unpressed"] forState:UIControlStateNormal];
        [btnDone setImage:[UIImage imageNamed:@"slide_3_button_pressed"] forState:UIControlStateHighlighted];
        [btnDone addTarget:self.delegate action:@selector(onDoneButtonPressed) forControlEvents:UIControlEventTouchUpInside];
        [_viewFour addSubview:btnDone];
    }
    return _viewFour;
}
-(UIView *)viewFive {
    if (!_viewFive) {
    }
    return _viewFive;
}
-(UIScrollView *)scrollView {
    if (!_scrollView) {
        _scrollView = [[UIScrollView alloc] initWithFrame:self.frame];
        [_scrollView setDelegate:self];
        [_scrollView setPagingEnabled:YES];
        [_scrollView setContentSize:CGSizeMake(self.frame.size.width*numberofPage, self.scrollView.frame.size.height)];
        [self.scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
    }
    return _scrollView;
}
-(UIPageControl *)pageControl {
    if (!_pageControl) {
        _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height-20, self.frame.size.width, 10)];
        //[_pageControl setCurrentPageIndicatorTintColor:UIColorFromRGBAlpha(252, 61, 136, 1)];
        //[_pageControl setPageIndicatorTintColor:UIColorFromRGBAlpha(223, 227, 232, 1)];
        [_pageControl setNumberOfPages:numberofPage];
    }
    return _pageControl;
}
-(UIButton *)doneButton {
    if (!_doneButton) {
        _doneButton = [[UIButton alloc] initWithFrame:CGRectMake(0, self.frame.size.height-60, self.frame.size.width, 100)];
        [_doneButton setTintColor:[UIColor whiteColor]];
        //  [_doneButton.titleLabel setFont:FONT_Regular(17)];
        [_doneButton setBackgroundColor:[UIColor colorWithRed:96/255.0 green:167/255.0 blue:23/255.0 alpha:1]];
        [_doneButton addTarget:self.delegate action:@selector(onDoneButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    }
    return _doneButton;
}
@end

Maybe what I am asking is not possible to be implemented.

Any clues and ideas are welcome

Upvotes: 0

Views: 51

Answers (1)

Jayachandra A
Jayachandra A

Reputation: 1342

You can easily achieve your requirement by modifying ABCIntroView class. From ABCIntroView you are getting the callback as - (void)onDoneButtonPressed to IntroSlideViewController so there you are navigating to MainViewController.

So follow up these steps to achieve your requirement

  1. Remove done button code from ABCIntroView.
  2. Modify the below function.

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGFloat pageWidth = CGRectGetWidth(self.bounds);
    CGFloat pageFraction = self.scrollView.contentOffset.x/pageWidth;
    self.pageControl.currentPage = roundf(pageFraction);
    if (self.delegate != nil &&  self.pageControl.currentPage == 4){
        [self.delegate onDoneButtonPressed];
    }}
    

Upvotes: 2

Related Questions