Search code examples
iosobjective-cicarousel

How to load iCarousel view from storyboard or xib?


I am using one 3rd party control iCarousel view to show view with nice animation.

Every thing is working fine and i am pretty much aware about this control.

But till now I am using manually code to add view in iCarousel view and show it on screen but now as per my new requirement are i got 3 to 4 new themes which i need to show iCarousel view so below is my question related to that view.

  1. How can i load different views from XIB?

  2. How can i load view from Storyboard TO iCarousel view?

Currently i am using below method to add view manually.

viewForItemAtIndex:(NSInteger)index resuingView:(UIView*) view

Please help me to achieve this through Storyboard/ XIB.


Solution

  • Create a iCarousel with a inverted wheel type using a custom view from nib

       @IBOutlet weak var viewCarousel: iCarousel!
    
        override func viewDidLoad() {
                super.viewDidLoad()
            viewCarousel.type = .invertedWheel
            viewCarousel.isVertical = true
            viewCarousel.delegate = self
            viewCarousel.dataSource = self
        }
    

    iCarousel DataSource

    func numberOfItems(in carousel: iCarousel) -> Int {
        return 25
    }
    
    func carousel(_ carousel: iCarousel, viewForItemAt index: Int, reusing view: UIView?) -> UIView {
            // use a custom view from nib
            let view = Bundle.main.loadNibNamed("CarouselReuseView", owner: self, options: nil)![0] as! CarouselReuseView
            view.frame.size = CGSize(width: self.view.frame.size.width/2, height: 83.0)
            view.backgroundColor = UIColor.lightGray
    
            let friend = friendList[index] as friend
            view.lblName.text = friend.fullName
            let url = friend.photo
            let task = URLSession.shared.dataTask(with: URL(string: url)!, completionHandler: {data, response, error in
                if error == nil {
                    DispatchQueue.main.async {
                        view.imageView.image = UIImage(data: data!)
                        view.imageView.layer.cornerRadius = view.imageView.frame.size.width/2
                        view.imageView.layer.masksToBounds = true
                    }
                }
            })
            task.resume()
            return view
        }
    
    }
    

    Objectiv C

    @property (weak, nonatomic) IBOutlet iCarousel *carouselView;
    
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        _carouselView.type = iCarouselTypeInvertedWheel;
        _carouselView.vertical = true;
        _carouselView.delegate = self;
        _carouselView.dataSource = self;
        _carouselView.layer.masksToBounds = true;
    }
    

    iCarousel DataSource

    -(NSInteger)numberOfItemsInCarousel:(iCarousel *)carousel {
        return 10;
    }
    
    -(UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view {
    
        CustomView* myViewObject = [[[NSBundle mainBundle] loadNibNamed:@"customView" owner:self options:nil] objectAtIndex:0];
    
        myViewObject.lbl.text = [NSString stringWithFormat:@"%ld",(long)index];
    
        return myViewObject;
    }
    

    here CustomView is my subclass of UIView and "customView" is UIView Xib name i hope this help you

    More info :- https://github.com/nicklockwood/iCarousel