Добавление NSTimer в слайд изображения и управление страницей для автоматического перемещения изображений

Вот слайдер изображения отлично работает при перетаскивании вручную, изображение меняется с изменением индикатора управления страницей, но я хочу добавить таймер к следующему коду и автоматически перемещать изображения и индикатор. Пожалуйста, помогите мне применить таймер NS в этом коде, а также перейти от последнего изображения к 1-му изображению и так далее.

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


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

person Nitin    schedule 24.06.2018    source источник
comment
какой элемент управления вы используете в настоящее время, чтобы показать это? Прокрутка?   -  person Hardik Thakkar    schedule 25.06.2018
comment
да ScrollView с ImageView внутри него.   -  person Nitin    schedule 25.06.2018
comment
У меня такая же функциональность, но я использую представление коллекции для того же, попробуйте использовать представление коллекции, если это возможно. или если я получу какое-либо решение, я предоставлю вам.   -  person Hardik Thakkar    schedule 25.06.2018
comment
вы использовали представление коллекции с индикатором управления страницей? У вас есть ссылка на этот код? Я хочу увидеть.   -  person Nitin    schedule 25.06.2018
comment
Извини, братан, у меня нет ссылки на это, но я дам тебе некоторое представление об этом.   -  person Hardik Thakkar    schedule 26.06.2018


Ответы (1)


Попробуйте этот код для NSTimer (для удобства я использую collectionView)

var timer : Timer?
var currentFeaturedCouponIndex = 0

//MARK: - NSTimer -
    func setupTimer(){
        timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(self.scrollFeatured), userInfo: nil, repeats: true);
    }

func scrollFeatured(){
        if self.arrFeaturedCoupon.count > 0 {
            //Becauese we scroll coupon if total is > 1
            if self.arrFeaturedCoupon.count > 1 {
                if self.currentFeaturedCouponIndex < self.arrFeaturedCoupon.count - 1 {
                    self.currentFeaturedCouponIndex = self.currentFeaturedCouponIndex + 1
                }
                else {
                    self.currentFeaturedCouponIndex = 0
                }

                self.pageControl.currentPage = currentFeaturedCouponIndex

                //When currentFeaturedCouponIndex == 0  we make animated: false
                if self.currentFeaturedCouponIndex == 0 {
                     self.featuredCouponColView.scrollToItem(at: self.featuredCouponCurrentIndexPath, at: UICollectionViewScrollPosition.left, animated: false)
                }
                else {
                     self.featuredCouponColView.scrollToItem(at: self.featuredCouponCurrentIndexPath, at: UICollectionViewScrollPosition.left, animated: true)
                }
            }
        }
    }

Чтобы отключить таймер, когда и где вы хотите

func invalidateTimer(){
        if timer != nil {
            self.timer!.invalidate()
            self.timer = nil
        }
    }
person Hardik Thakkar    schedule 26.06.2018