简体   繁体   English

如何使用NSTimer在滚动视图内的图像幻灯片上更改页面控制指示器

[英]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. 我认为您必须在for循环中设置当前页面,以便使用图像自动更改pagecontrol。

//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];
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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