简体   繁体   中英

How change the page control indicator on image slide inside scrollview using NSTimer

Here is the image slider which works fine. When dragging manually the image changes and indicator also changes but when i add animation only image changes automatically not the indicator.

Instead of animating image i want to scroll image so that indicators change just like it changes on dragging. Also i want to add timer to it.

@implementation DashboardViewController {
  NSArray * animationArray;
}

@synthesize scroller = scroller;
@synthesize pageControl = pageControl;




-
(void) viewDidLoad {
  [super viewDidLoad];

  scroller.pagingEnabled = YES;
  scroller.showsHorizontalScrollIndicator = NO;
  scroller.delegate = self;



  animationArray = [NSArray arrayWithObjects: [UIImage imageNamed: @ "image1.jpg"],
    [UIImage imageNamed: @ "image2.jpg"],
    [UIImage imageNamed: @ "image3.jpg"],
    [UIImage imageNamed: @ "image4.png"],
    [UIImage imageNamed: @ "image5.jpg"],
    nil
  ];



  CGRect scrollFrame = CGRectMake(0, 0, self.view.frame.size.width, self.scroller.frame.size.height);
  scroller.frame = scrollFrame;



  self.scroller.contentSize = CGSizeMake(self.scroller.frame.size.width * animationArray.count, self.scroller.frame.size.height);

  for (int i = 0; i < animationArray.count; i++) {
    CGRect frame;
    frame.origin.x = self.scroller.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scroller.frame.size;
    UIImageView * imgView = [
      [UIImageView alloc] initWithFrame: CGRectMake(self.scroller.frame.size.width * i, 0, self.scroller.frame.size.width, self.scroller.frame.size.height)
    ];
    imgView.image = [animationArray objectAtIndex: i];
    imgView.frame = frame;

          imgView.animationImages      = animationArray;
          imgView.animationDuration    = 8;
          imgView.animationRepeatCount = 0;
          [imgView startAnimating];
          [self.scroller addSubview:imgView];
  }

  self.pageControl.currentPage = 0;

}


-
(void) scrollViewDidScroll: (UIScrollView * ) sender {
    if (!pageControlBeingUsed) {
      // Switch the indicator when more than 50% of the previous/next page is visible
      CGFloat pageWidth = self.scroller.frame.size.width;
      int page = floor((self.scroller.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
      self.pageControl.currentPage = page;
    }
  } -
  (void) scrollViewWillBeginDragging: (UIScrollView * ) scrollView {
    pageControlBeingUsed = NO;
  }

  -
  (void) scrollViewDidEndDecelerating: (UIScrollView * ) scrollView {
    [self setIndiactorForCurrentPage];

  } -
  (void) setIndiactorForCurrentPage {
    uint page = scroller.contentOffset.x / scroller.frame.size.width;
    [pageControl setCurrentPage: page];




  }



  -
  (IBAction) changePage {
    // Update the scroll view to the appropriate page
    CGRect frame;

    pageControl.currentPage = animationArray.count;

    frame.origin.x = self.scroller.frame.size.width * self.pageControl.currentPage;
    frame.origin.y = 0;
    frame.size = self.scroller.frame.size;
    [self.scroller scrollRectToVisible: frame animated: YES];
    pageControlBeingUsed = YES;


  }



  -
  (void) didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

    self.scroller = nil;
    self.pageControl = nil;
  }

Instead of animating image i want to scroll image so that indicators change just like it changes on dragging. Also i want to add timer to it.

I think you have to set your current page inside your for loop for automatic change pagecontrol with image.

//move this up
self.pageControl.currentPage = 0;

for (int i = 0; i < animationArray.count; i++) {
    CGRect frame;
    frame.origin.x = self.scroller.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scroller.frame.size;
    UIImageView * imgView = [
      [UIImageView alloc] initWithFrame: CGRectMake(self.scroller.frame.size.width * i, 0, self.scroller.frame.size.width, self.scroller.frame.size.height)
    ];
    imgView.image = [animationArray objectAtIndex: i];
    imgView.frame = frame;
          imgView.animationImages      = animationArray;
          imgView.animationDuration    = 8;
          imgView.animationRepeatCount = 0;
          [imgView startAnimating];
          self.pageControl.currentPage = i; //set i to current page
          [self.scroller addSubview:imgView];
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM