如何从故事板或 xib 加载 iCarousel 视图?
How to load iCarousel view from storyboard or xib?
我正在使用一个第 3 方控件 iCarousel
视图来显示具有漂亮动画的视图。
一切正常,我非常了解这个控件。
但直到现在我都在使用手动代码在 iCarousel
视图中添加视图并将其显示在屏幕上但是现在根据我的新要求我有 3 到 4 个新主题需要显示 iCarousel
视图所以下面是我与该视图相关的问题。
如何加载来自 XIB
的不同视图?
如何从 Storyboard
加载视图到 iCarousel
视图?
目前我正在使用以下方法手动添加视图。
viewForItemAtIndex:(NSInteger)index resuingView:(UIView*) view
请帮助我通过 Storyboard/ XIB
实现此目标。
使用 nib 中的自定义视图创建具有倒转轮类型的 iCarousel
@IBOutlet weak var viewCarousel: iCarousel!
override func viewDidLoad() {
super.viewDidLoad()
viewCarousel.type = .invertedWheel
viewCarousel.isVertical = true
viewCarousel.delegate = self
viewCarousel.dataSource = self
}
iCarousel 数据源
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 数据源
-(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;
}
这里的 CustomView 是我的 UIView 子类,"customView" 是 UIView Xib 名称
希望对你有帮助
试试这个:
-(UIView *) carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view{
UIView *globleView = (UIView *)view;
if (!globleView) {
globleView = [[[NSBundle mainBundle] loadNibNamed:@"yourView" owner:self options:nil] objectAtIndex:0];;
globleView.backgroundColor = [UIColor clearColor];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:globleView.frame];
imageView.tag = 100;
[globleView addSubview:imageView];
UILabel *lblFeatureRecipeName = [[UILabel alloc]initWithFrame:CGRectMake(15, ViewHeight(globleView) -50, ViewWidth(globleView)-40, 50)];
lblFeatureRecipeName.tag = 101;
[globleView addSubview:lblFeatureRecipeName];
if (index == 0) {
[self refreshCarousleViewWithView:globleView withIndex:index];
}
}
return globleView;
}
我正在使用一个第 3 方控件 iCarousel
视图来显示具有漂亮动画的视图。
一切正常,我非常了解这个控件。
但直到现在我都在使用手动代码在 iCarousel
视图中添加视图并将其显示在屏幕上但是现在根据我的新要求我有 3 到 4 个新主题需要显示 iCarousel
视图所以下面是我与该视图相关的问题。
如何加载来自
XIB
的不同视图?如何从
Storyboard
加载视图到iCarousel
视图?
目前我正在使用以下方法手动添加视图。
viewForItemAtIndex:(NSInteger)index resuingView:(UIView*) view
请帮助我通过 Storyboard/ XIB
实现此目标。
使用 nib 中的自定义视图创建具有倒转轮类型的 iCarousel
@IBOutlet weak var viewCarousel: iCarousel!
override func viewDidLoad() {
super.viewDidLoad()
viewCarousel.type = .invertedWheel
viewCarousel.isVertical = true
viewCarousel.delegate = self
viewCarousel.dataSource = self
}
iCarousel 数据源
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 数据源
-(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;
}
这里的 CustomView 是我的 UIView 子类,"customView" 是 UIView Xib 名称 希望对你有帮助
试试这个:
-(UIView *) carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view{
UIView *globleView = (UIView *)view;
if (!globleView) {
globleView = [[[NSBundle mainBundle] loadNibNamed:@"yourView" owner:self options:nil] objectAtIndex:0];;
globleView.backgroundColor = [UIColor clearColor];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:globleView.frame];
imageView.tag = 100;
[globleView addSubview:imageView];
UILabel *lblFeatureRecipeName = [[UILabel alloc]initWithFrame:CGRectMake(15, ViewHeight(globleView) -50, ViewWidth(globleView)-40, 50)];
lblFeatureRecipeName.tag = 101;
[globleView addSubview:lblFeatureRecipeName];
if (index == 0) {
[self refreshCarousleViewWithView:globleView withIndex:index];
}
}
return globleView;
}