Ios 如何在TableViewCell中使用自定义ImageView(类)

Ios 如何在TableViewCell中使用自定义ImageView(类),ios,uitableview,swift2,uipagecontrol,Ios,Uitableview,Swift2,Uipagecontrol,我正试图在我的UITableViewCell中获取此信息 一种图像视图,可容纳一组图像,并可滚动 所以我试了一下: class MostWantedImageView: UIImageView , UIScrollViewDelegate{ var pageImages:[UIImage] = [UIImage]() var pageViews:[UIImageView?] = [UIImageView]() var scrollView:UIScrollView = UIScrol

我正试图在我的UITableViewCell中获取此信息

一种图像视图,可容纳一组图像,并可滚动

所以我试了一下:

class MostWantedImageView: UIImageView ,  UIScrollViewDelegate{



var pageImages:[UIImage] = [UIImage]()
var pageViews:[UIImageView?] = [UIImageView]()

var scrollView:UIScrollView = UIScrollView()
var pageControl:UIPageControl = UIPageControl()

var viewingPage = -1

func loadVisiblePages() {
    // First, determine which page is currently visible
    let pageWidth:CGFloat = self.frame.size.width;
    let page = Int(floor((self.scrollView.contentOffset.x * 2.0 + pageWidth) / (pageWidth * 2.0)));

    /*
     Check that page have changed,
     in case that user drag left in first page, or drag right in last page
     a 'scrollViewDidEndDecelerating' is fired
     */
    if viewingPage != page {

        // Update the page control
        self.pageControl.currentPage = page;

        // Work out which pages we want to load
        let firstPage = page - 1;
        let lastPage = page + 1;

        // Purge anything before the first page
        for (var i=0; i<firstPage; i += 1) {
            self.purgePage(i)
        }
        for (var i=firstPage; i<=lastPage; i += 1) {
            self.loadPage(i)
        }
        for (var i = lastPage+1 ; i < self.pageImages.count ; i += 1) {
            self.purgePage(i)
        }

        viewingPage = page
    }

}

func loadPage(page:Int) {
    if page < 0 || page >= self.pageImages.count {
        // If it's outside the range of what we have to display, then do nothing
        return;
    }

    // Load an individual page, first seeing if we've already loaded it
    let pageView:UIImageView? = self.pageViews[page];
    if pageView == nil {
        var frame:CGRect = self.bounds;
        //frame.origin.x = frame.size.width * CGFloat(page)
        frame.origin.x = 320.0 * CGFloat(page)
        frame.origin.y = 0.0

        var newPageView:UIImageView = UIImageView(image: self.pageImages[page])
        newPageView.contentMode = UIViewContentMode.ScaleAspectFit;
        newPageView.frame = frame;
        self.scrollView.addSubview(newPageView)
        self.pageViews[page] = newPageView
    }
}

func purgePage(page:Int) {
    if page < 0 || page >= self.pageImages.count {
        // If it's outside the range of what we have to display, then do nothing
        return;
    }

    // Remove a page from the scroll view and reset the container array
    let pageView:UIView? = self.pageViews[page];
    if pageView != nil {
        pageView?.removeFromSuperview()
        self.pageViews[page] = nil
    }
}



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


    self.backgroundColor = UIColor.blueColor()

    // Set up the image we want to scroll & zoom and add it to the scroll view

    self.pageImages.append(UIImage(named: "event1")!)
    self.pageImages.append(UIImage(named: "event2")!)
    self.pageImages.append(UIImage(named: "event3")!)

    let pageCount = self.pageImages.count

    self.scrollView.pagingEnabled = true
    self.scrollView.delegate = self
    self.scrollView.showsHorizontalScrollIndicator = false
    self.scrollView.showsVerticalScrollIndicator = false

    // Set up the page control
    self.pageControl.currentPage = 0;
    self.pageControl.numberOfPages = pageCount;

    self.pageControl.frame = self.frame
    self.scrollView.frame = self.frame

    self.pageControl.translatesAutoresizingMaskIntoConstraints = false
    self.scrollView.translatesAutoresizingMaskIntoConstraints = false

    self.addSubview(self.pageControl)
    self.addSubview(self.scrollView)
    self.userInteractionEnabled = true


    //Set layout
    var viewsDict = Dictionary <String, UIView>()
    viewsDict["control"] = self.pageControl;
    viewsDict["scrollView"] = self.scrollView;

    self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[scrollView]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewsDict))
    self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0-[control]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewsDict))
    self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0-[scrollView(400)]-[control]-0-|", options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: viewsDict))

    // Set up the array to hold the views for each page
    for (var i = 0; i < pageCount; ++i) {
        self.pageViews.append(nil)
    }


    // Set up the content size of the scroll view
    let pagesScrollViewSize:CGSize = self.scrollView.frame.size;
    self.scrollView.contentSize = CGSizeMake(pagesScrollViewSize.width * CGFloat(self.pageImages.count), pagesScrollViewSize.height);

    // Load the initial set of pages that are on screen
    self.loadVisiblePages()
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

init() {


    super.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}




func scrollViewDidEndDecelerating(scrollView: UIScrollView!) {
    self.loadVisiblePages()
}


func ResizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
    let size = image.size

    let widthRatio  = targetSize.width  / image.size.width
    let heightRatio = targetSize.height / image.size.height

    // Figure out what our orientation is, and use that to form the rectangle
    var newSize: CGSize
    if(widthRatio > heightRatio) {
        newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio)
    } else {
        newSize = CGSizeMake(size.width * widthRatio,  size.height * widthRatio)
    }

    // This is the rect that we've calculated out and this is what is actually used below
    let rect = CGRectMake(0, 0, newSize.width, newSize.height)

    // Actually do the resizing to the rect using the ImageContext stuff
    //UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
    UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
    image.drawInRect(rect)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()


    return newImage
}


}
类MostWantedImageView:UIImageView、UIScrollViewDelegate{
var pageImages:[UIImage]=[UIImage]()
变量页面视图:[UIImageView?]=[UIImageView]()
var scrollView:UIScrollView=UIScrollView()
var pageControl:UIPageControl=UIPageControl()
var viewingPage=-1
func loadVisiblePages(){
//首先,确定当前可见的页面
让pageWidth:CGFloat=self.frame.size.width;
让page=Int(floor((self.scrollView.contentOffset.x*2.0+pageWidth)/(pageWidth*2.0));
/*
检查页面是否已更改,
如果用户在第一页向左拖动,或在最后一页向右拖动
“ScrollViewDiEndDecelling”被触发
*/
如果查看页面!=页面{
//更新页面控件
self.pageControl.currentPage=page;
//确定要加载的页面
让firstPage=page-1;
设lastPage=page+1;
//清除第一页之前的任何内容
对于(变量i=0;i=self.pageImages.count{
//如果它超出了我们必须显示的范围,那么什么也不做
返回;
}
//从滚动视图中删除页面并重置容器阵列
让pageView:UIView?=self.pageViews[page];
如果pageView!=nil{
pageView?.removeFromSuperview()
self.pageViews[页面]=无
}
}
重写初始化(帧:CGRect){
super.init(frame:frame)
self.backgroundColor=UIColor.blueColor()
//设置要滚动和缩放的图像,并将其添加到滚动视图中
self.pageImages.append(UIImage(名为:“event1”)!)
self.pageImages.append(UIImage(名为:“event2”)!)
self.pageImages.append(UIImage(名为:“event3”)!)
让pageCount=self.pageImages.count
self.scrollView.paginEnabled=true
self.scrollView.delegate=self
self.scrollView.showshorizontalscrollingindicator=false
self.scrollView.showsVerticalScrollIndicator=false
//设置页面控件
self.pageControl.currentPage=0;
self.pageControl.numberOfPages=页面计数;
self.pageControl.frame=self.frame
self.scrollView.frame=self.frame
self.pageControl.translatesAutoresizingMaskIntoConstraints=false
self.scrollView.translatesAutoResizengMaskintoConstraints=false
self.addSubview(self.pageControl)
self.addSubview(self.scrollView)
self.userInteractionEnabled=true
//集合布局
var viewsDict=字典()
viewsDict[“control”]=self.pageControl;
viewsDict[“scrollView”]=self.scrollView;
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“H:|-0-[scrollView]-0-|”,选项:NSLayoutFormatOptions(rawValue:0),度量:nil,视图:viewsDict))
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“H:|-0-[control]-0-|”,选项:NSLayoutFormatOptions(rawValue:0),度量:nil,视图:viewsDict))
self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat(“V:|-0-[scrollView(400)]-[control]-0-[0-|”,选项:NSLayoutFormatOptions(rawValue:0),度量:nil,视图:viewsDict))
//设置数组以保存每个页面的视图
对于(变量i=0;iUIImage{
让size=image.size
let widthRatio=targetSize.width/image.size.width
let heightRatio=targetSize.height/image.size.height
//找出我们的方向是什么,然后用它来形成矩形
var newSize:CGSize
如果(宽度比>高度比){
newSize=CGSizeMake(size.width*heightRatio,size.height*heightRatio)
}否则{
newSize=CGSizeMake(size.width*widthRatio,size.height*widthRatio)
}
//这是我们计算出的rect,这是下面实际使用的
让rect=CGRectMake(0,0,newSize.width,newSize.height)
//实际上,使用ImageContext来调整rect的大小
//UIGraphicsBeginImageContextWithOptions(newSize,false,1.0)
UIGraphicsBeginImageContextWithOptions(newSize,false,0.0)
image.drawInRect(rect)
让newImage=UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsSendImageContext()
返回新图像
}
}

这是一个ImageView,我在其中放置了scrollView和UIPageControll。我可以在我的ViewController中使用它,但不知道如何在我的TableViewCell中使用它,如果有人能在这方面给我一些指导,那么它将对我有帮助。请使用CollectionView。随着图像数量的增加,你的应用程序将有更好的性能表现问题

你需要看看这个-


这将帮助您了解如何在表格单元格中使用collectionView。

请改用collectionView。随着图像数量的增加,您的应用程序将出现性能问题

你需要看看这个-


这将帮助您了解如何在表格单元格中使用collectionView。

@remyboys是的,您可以使用UICollectionView而不仅仅是普通的UIScrollView@remyboys是的,您可以通过UICollectionView而不是ju获得此功能以及更多功能