2010-09-12 17 views

Respuesta

28

Añadir la variable int h a su interfaz, y yourScrollView como una propiedad. Luego:

[NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 

- (void) onTimer { 

    // Updates the variable h, adding 100 (put your own value here!) 
    h += 100; 

    //This makes the scrollView scroll to the desired position 
    yourScrollView.contentOffset = CGPointMake(0, h); 

} 
+0

su no desplazarse sin problemas .. –

+6

Para animar suavemente el rollo, utilizar este método: '[yourScrollView setContentOffset: CGPointMake (0, h) animada: YES];' – henryeverett

+0

se lo int tipo de variable H ?? –

3

para obtener el valor actual como w (valor x) o h (valor y) del contenido. Esto ayuda con el desplazamiento manual/semiautomático con el punto de referencia actual en su contenido de su UIScollView.

CGFloat w = scroller.contentOffset.x; 

o

CGFloat h = scroller.contentOffset.y; 

luego, por supuesto:

h += 100; // h-=100 for decrement 
yourScrollView.contentOffset = CGPointMake(0, h); 
7

modificar el código anterior

[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; 

-(void) onTimer { 
    // NSLog(@"content offset %f",scrollVw.contentOffset.y); 
    if (scrollVw.contentOffset.y<MAX_ALLOWED_OFFSET) { 
    //scroll to desire position 
    scrollVw.contentOffset = CGPointMake(0, scrollVw.contentOffset.y+1); 
    } 


    } 
0

Tal vez, [rueda scrollRectToVisibile: animada:] es mejor que [ scroll setContentOffset]. Porque setContentOffset dará lugar a desplazarse fuera de borde. ¡Solo pruébalo!

2

versión Swift

Añada las siguientes propiedades

var offSet: CGFloat = 0 

@IBOutlet weak var imagePageControl: UIPageControl! 
@IBOutlet weak var imageScrollView: UIScrollView! 

let imageArray = [your images] 

modificar el viewDidLoad()

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.offSet = 0 
    let timer = Timer.scheduledTimer(timeInterval: 8, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true) 

    imagePageControl.numberOfPages = bannerArray.count 
    imageScrollView.isPagingEnabled = true 
    imageScrollView.contentSize.height = 200 
    imageScrollView.contentSize.width = self.view.bounds.width * CGFloat(bannerArray.count) 
    imageScrollView.showsHorizontalScrollIndicator = false 

    imageScrollView.delegate = self 

    for (index, image) in imageArray.enumerated() { 
     let image = image 
     let imageView = UIImageView(image: image) 
     imageView.contentMode = .scaleAspectFill 
     imageView.frame.size.width = self.view.bounds.size.width 
     imageView.frame.size.height = 200 
     imageView.frame.origin.x = CGFloat(index) * self.view.bounds.size.width 
     imageScrollView.addSubview(imageView) 
    } 
} 

crear esta función de desplazamiento automático

func autoScroll() { 
    let totalPossibleOffset = CGFloat(imageArray.count - 1) * self.view.bounds.size.width 
    if offSet == totalPossibleOffset { 
     offSet = 0 // come back to the first image after the last image 
    } 
    else { 
    offSet += self.view.bounds.size.width 
    } 
    DispatchQueue.main.async() { 
     UIView.animate(withDuration: 0.3, delay: 0, options: UIViewAnimationOptions.curveLinear, animations: { 
      self.imageScrollView.contentOffset.x = CGFloat(self.offSet) 
     }, completion: nil) 
    } 
} 

Añadir esta función para desplazamiento manual de

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    let page = scrollView.contentOffset.x/scrollView.frame.size.width 
    imagePageControl.currentPage = Int(page) 
    self.offSet = page * scrollView.frame.size.width // this updates offset value so that automatic scroll begins from the image you arrived at manually 
} 

Nota: Aunque la pregunta es específica de desplazamiento automático, he añadido desplazamiento manual, así. De modo que tanto el desplazamiento automático como el desplazamiento manual funcionan en tándem. Además, he agregado un UIPageControl. Por favor, elimine el imagePageControl si no lo necesita.

Cuestiones relacionadas