2017-08-18 14 views
0

UIScrollViewカスタムクラスの上にページコントロールを追加しようとしています。すべてがうまくいきます。しかし、私がscrollViewをスライドするたびに、Page Controlは最初のImageに沿ってスライドします。ここでスクロールせずにUIScrollViewのビューを追加する(プログラムで)

は私のコードです:あなたはページのコントロールを見ることができるように

import Foundation 
import UIKit 
import SwiftyGif 

class MBSPagingScrollView: UIScrollView { 

var pageControl = UIPageControl() 
var imagesArray = [String]() 

override init (frame : CGRect) { 
    super.init(frame : frame) 
} 

convenience init() { 
    self.init(frame:CGRect.zero) 
} 

required init(coder aDecoder: NSCoder) { 
    fatalError("This class does not support NSCoding") 
} 

init(frame : CGRect, imagesarray : [String]){ 
    super.init(frame : frame) 

    imagesArray = imagesarray 

    self.isPagingEnabled = true 
    self.showsHorizontalScrollIndicator = false 

    for (index, imageName) in imagesArray.enumerated() { 

     var imageView = UIImageView() 

     if imageName.hasSuffix(".gif") { 
      let gifManager = SwiftyGifManager(memoryLimit:30) 
      let gif = UIImage(gifName: imageName) 
      imageView = UIImageView(gifImage: gif, manager: gifManager) 
     } 

     else { 
      imageView = UIImageView(image: UIImage(named: imageName)) 
      imageView.contentMode = UIViewContentMode.scaleToFill 
     } 

     imageView.frame = CGRect(x: CGFloat(index) * self.frame.size.width, y: 0, width: self.frame.size.width, height: self.frame.size.height) 
     self.addSubview(imageView) 

    } 

    self.contentSize = CGSize(width:self.frame.size.width * CGFloat(imagesArray.count),height: self.frame.size.height) 

    configurePageControl() 
    pageControl.addTarget(self, action: #selector(self.changePage(sender:)), for: UIControlEvents.valueChanged) 
} 

func configurePageControl() { 
    self.pageControl.frame = CGRect(x: 0, y: self.frame.size.height - 50, width: self.frame.size.width, height: 50) 
    self.pageControl.numberOfPages = imagesArray.count 
    self.pageControl.currentPage = 0 
    self.pageControl.tintColor = UIColor.red 
    self.pageControl.pageIndicatorTintColor = UIColor.black 
    self.pageControl.currentPageIndicatorTintColor = MainOrangeColor 
    self.addSubview(pageControl) 
} 

// // MARK : TO CHANGE WHILE CLICKING ON PAGE CONTROL 
    func changePage(sender: AnyObject) ->() { 
     let x = CGFloat(pageControl.currentPage) * self.frame.size.width 
     self.setContentOffset(CGPoint(x:x, y:0), animated: true) 
    } 

func selfDidEndDecelerating(_ scrollView: UIScrollView) { 
    let pageNumber = round(self.contentOffset.x/self.frame.size.width) 
    pageControl.currentPage = Int(pageNumber) 
} 

}

そして、ここでは

Page control is centered on the first image

enter image description here

が起き、問題の画像であり、 fiと摺動している最初の画像。私は中心に留まることが必要です。

助けていただけたら幸いです!

答えて

2

私はあなたがストーリーボードに行って、UIビルダーの左メニューからページコントロールをドラッグしてスクロールビューの下に置いて、下の図のようにすることができると思います。

enter image description here

次に、ページコントロールを適切に配置するために適切な制約を追加する必要があります。

幸運を祈る!

+0

こんにちは、私はストーリーボードなしでプログラムでこれをコーディングしています。しかし、助けてくれてありがとう! –

+0

@MohammadBashirSidaniそれは無関係です。このアイデアは、ストーリーボード、ペン先、コードのいずれの場合でも同じです。ビューにページコントロールを追加するだけです。スクロールビューではありません。 – Fogmeister

+0

あなたはモハメドを歓迎します。これはあなたのページコントロールをスクロールビューに追加している間に問題が発生する可能性があると考えています。 たとえば、 'configurePageControl'メソッドをビューコントローラに配置し、ビューコントローラ内にページコントロールの設定を行い、 'self.view'にページコントロールを追加することができます。 –

0

スクロールしたくない場合はスクロールビューに追加しないでください。

スクロールビューの代わりにself.viewにページコントロールを追加するだけです。

+0

のビューを含んでいませんが、これはUIScrollView型のカスタムクラスです –

+0

@MohammadBashirSidaniなぜですか?サブクラスを作ることで何を得ているのですか? UIScrollViewを使って、サブクラス化しないでください。 – Fogmeister

+0

私はUIPageViewControllerを使用せずにページネーションを使用してUIScrollViewを作成したい(ビューコントローラではなくscrollviewとして) –

関連する問題