代码之家  ›  专栏  ›  技术社区  ›  Nitin

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

  •  0
  • Nitin  · 技术社区  · 6 年前

    这是图像滑块,工作正常。手动拖动时,图像会更改,指示器也会更改,但添加动画时,仅图像会自动更改,指示器不会更改。

    我不想给图像设置动画,而是想滚动图像,使指示器改变 就像它在拖动时改变一样。我还想添加计时器。

    @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;
      }
    

    我不想给图像设置动画,而是想滚动图像,使指示器改变 就像它在拖动时改变一样。我还想添加计时器。

    1 回复  |  直到 6 年前
        1
  •  0
  •   9to5ios    6 年前

    我认为您必须将当前页面设置在for循环中,以便使用图像自动更改页面控制。

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