2016-05-11 10 views
2

In meiner schnellen App habe ich eine UIViewController mit einigen Tasten und Etiketten. Ich dachte, es wäre cool, ein Bild im Hintergrund zu haben, das automatisch langsam von rechts nach links scrollt (gleitet). Ich schaffe es, in den Hintergrund zu setzen UIImageView und zugewiesene Einschränkungen, so dass es die gesamte Palette bedeckt, aber ich bin mir nicht sicher, wie kann ich das Foto darin scrollen.Wie kann ich ein Bild anzeigen, das automatisch im Hintergrund meines uiviewcontrollers in Swift scrollt?

Ich habe eine PNG-Datei im Verhältnis von 21:9 - ist es möglich, es dann zu scrollen?

+0

Wie lange tun wollen Sie das Bild Dia machen? – Laffen

+0

wenn möglich - auf unbestimmte Zeit, ich meine, wenn dieses Bild das Ende erreicht - dachte ich darüber nach, das gleiche Foto dort zu setzen und weiter scrollen, so dass der Benutzer keinen leeren Raum sehen wird ... Wenn das nicht möglich ist, bis es das Ende ist das Foto dann. – user3766930

Antwort

0

Sie verwenden uiview Animationen für dieses

UIView.animateWithDuration(2, delay: 0.4, 
    options: [.Repeat, .Autoreverse, .CurveEaseInOut], animations: { 
     // scroll automatically using scroll view method (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated.Keep animated NO**strong text**.you can scroll horizontally or vertically using offset. 

    }, completion: nil) 

können Sie andere Animation überprüfen options.I vor Animieren scroll nicht versucht haben. Hoffe, das hilft ... :)

0
  1. andere UIImageView Erstellen und beschränkt es zu Ihrem ursprünglichen UIImageView durch die neue Ansicht führenden Anker der alten Ansicht der hinteren Anker einzuschränken.

  2. Erstellen Sie eine IBOutlet für die leading Ankerbeschränkung für das Original UIImageView.

  3. Legen Sie das Bild des neuen imageView so fest wie im Originalbild.

Hinweis: Für die beste Wirkung, sollten Sie eine nahtlose tileable Bild werden.

Anruf slideImage() von Ihrem viewDidAppear(_:)

@IBOutlet var backgroundImageConstraint: NSLayoutConstraint! 
@IBOutlet var backgroundImage: UIImageView! 

func slideImage(){ 

    // Changes constant to be equal to the image width, 
    // this will move the image off-screen on the left-hand side. 
    backgroundImageConstraint.constant = backgroundImage.frame.width 

    UIView.animateWithDuration(5, delay: 0, options: [.CurveLinear, .Repeat], animations: { 
     // Animates the constant change 
     self.view.layoutIfNeeded() 

     }, completion: { 
      done in 

      // Resets the image view back to its original position before starting a new round of the animation 
      self.backgroundImageConstraint.constant = 0 
      self.view.setNeedsUpdateConstraints() 
    }) 
} 

Edit:

Beispielprojekt here

+0

Danke, also sag mir - dieses 'IBOutlet' für backgroundImage ist dem ersten oder zweiten Bild zugeordnet? Und was ist mit dem anderen dann? – user3766930

+1

Die Steckdose ist für die erste UIImageView, Sie brauchen keine Steckdose für die andere. Dies liegt daran, dass es auf die erste Ansicht beschränkt ist, die es automatisch an der ersten Ansicht hängen lässt. – Laffen

+0

Und noch eine Frage - über Punkt Nr. 2 sprechen - IBOutlet für den "führenden" Anker - ist es die Steckdose, die (in Punkt Nr. 1) entsteht? oder zu einem anderen? – user3766930

0

Durch die Nutzung dieser dritten Partei, die wir gefunden werden können tun, dass

https://github.com/guowilling/SRInfiniteCarouselView

Wir können eine Ansicht hinzufügen, in der wir diese Codezeile einfach übergeben können.

@property (weak, nonatomic) IBOutlet UIView *demoView; 
- (void)viewDidAppear:(BOOL)animated{ 
    SRInfiniteCarouselView *imageCarouselView = [SRInfiniteCarouselView sr_carouselViewWithImageArrary:serviceImgArray describeArray:nil placeholderImage:nil delegate:self]; 
     imageCarouselView.frame = CGRectMake(0, 0, self.demoView.frame.size.width, self.demoView.frame.size.height); 
     imageCarouselView.timeInterval = 05.0; 
     [imageCarouselView setCurrentPageIndicatorTintColor:[UIColor yellowColor]]; 
     [imageCarouselView setPageIndicatorTintColor:[UIColor whiteColor]]; 
     [self.demoView addSubview:imageCarouselView]; 
} 
0

In Swift

func viewDidLoad(){ 
    Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(moveToNextImage), userInfo: nil, repeats: true) 
    } 

    func moveToNextImage(){ 
      let imgsCount:CGFloat = CGFloat(images.count) 
      let pageWidth:CGFloat = self.imageScrollView.frame.width 
      let maxWidth:CGFloat = pageWidth * imgsCount 
      let contentOffset:CGFloat = self.imageScrollView.contentOffset.x 

      var slideToX = contentOffset + pageWidth 

      if contentOffset + pageWidth == maxWidth{ 
       slideToX = 0 
      } 
      let currentPage:CGFloat = slideToX/pageWidth 
      // Change the indicator 
      self.pageController.currentPage = Int(currentPage) 
      self.imageScrollView.scrollRectToVisible(CGRect(x:slideToX, y:0, width:pageWidth, height:self.imageScrollView.frame.height), animated: true) 
     }