如何获取 iCarousel 当前可见视图?

Posted

技术标签:

【中文标题】如何获取 iCarousel 当前可见视图?【英文标题】:How to get iCarousel current visible view? 【发布时间】:2014-04-03 11:24:00 【问题描述】:

我正在使用 iCarousal,其中我必须在我的 iCarousal 视图上使用三个 webviews、五个 imageviews 和两个 Labels,总共 10 个 iCarousal 视图。我需要做的是根据标签获取标签、webviews 和 imageviews在下面的方法中,并在 iCarousel 移动时更改它们的值。

- (void)carouselCurrentItemIndexDidChange:(iCarousel *)objcarousel

我正在通过objcarousel.currentItemIndex 获取 iCarousel 的当前索引,但是当我获取带有标签的视图时,我无法获取当前视图。它提供了第二个下一个视图。

代码:

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel

    return MainIndexArray.count;


- (void)carouselCurrentItemIndexDidChange:(iCarousel *)carousel1


    if(carousel1.currentItemIndex<3)
    

    
    else
    
        UIWebView *WEB=(UIWebView *) [carousel1 viewWithTag:2];
        NSLog(@"WEB====%@",WEB);

        [WEB stopLoading];

        static NSString *youTubeVideohtml = @"<!DOCTYPE html><html><head><style>bodymargin:0px 0px 0px 0px;</style></head> <body> <div id=\"player\"></div> <script> var tag = document.createElement('script'); tag.src = \"http://www.youtube.com/player_api\"; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubePlayerAPIReady()  player = new YT.Player('player',  width:'%0.0f', height:'%0.0f', videoId:'%@', events:  'onReady': onPlayerReady,  );  function onPlayerReady(event)  event.target.playVideo();  </script> </body> </html>";

        NSLog(@"currentItemIndex=====%d",carousel1.currentItemIndex);

        NSString *html = [NSString stringWithFormat:youTubeVideoHTML, WEB.frame.size.width, WEB.frame.size.height,[YouTubeUrlArray objectAtIndex:0]];

        [WEB loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]];

     



- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view

    UILabel *label = nil;
    UIWebView *web=nil;

    //create new view if no view is available for recycling
    if (view == nil)
    
        view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 280, 200.0f)];
        ((UIImageView *)view).image = [UIImage imageNamed:@"page.png"];
        view.contentMode = UIViewContentModeCenter;

        if(index<3)
        
            label = [[UILabel alloc] initWithFrame:view.bounds];
            label.backgroundColor = [UIColor grayColor];
            label.textAlignment = NSTextAlignmentCenter;
            label.font = [label.font fontWithSize:50];
            label.tag = 1;
            [view addSubview:label];

        
        else
        
            web=[[UIWebView alloc]initWithFrame:view.bounds];
            web.tag=2;
            [view addSubview:web];
        
    
    else
    
        //get a reference to the label in the recycled view

        if(index<3)
        
            label = (UILabel *)[view viewWithTag:1];
        
        else
        
            web=(UIWebView*) [view viewWithTag:2];
        
    


    if(index<3)
    
        label.text = [MainIndexArray objectAtIndex:index];
    
    else
    
        [web loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]]];
    

    return view;

所以请建议我在 iCarousel 滚动时如何获取当前标签或当前 webview 或当前 imageview。

【问题讨论】:

我已经使用标签和 webview 添加了代码。 我的回答解释了你在carouselCurrentItemIndexDidChange: 中对viewWithTag: 做错了什么。 【参考方案1】:

您应该使用itemViewAtIndex:currentItemIndex 来获取单个项目视图。然后,在该视图上使用viewWithTag:

问题是viewWithTag: 搜索所有子视图并返回第一个匹配项。如果您在轮播本身上运行它,则无法保证首先找到并返回哪个视图。

UIWebView *WEB = (UIWebView *)[[carousel1 itemViewAtIndex:carousel1.currentItemIndex] viewWithTag:2];

【讨论】:

谢谢 wain 我明白了,但我还有一个问题。我正在使用 webview 自动播放 youtube 视频。当我滚动到另一个 webview 时,旧的 webview 也在加载视频,所以第三个太。我应该如何停止所有并播放唯一可见的。 我猜你需要将 HTML 设置为空字符串以停止加载,因为每个项目都从视图中删除。 是的,它确实可以很好地保存以前的索引并在获取相应视图后设置 nil。非常感谢。

以上是关于如何获取 iCarousel 当前可见视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 iCarousel 项目视图数据?

如何在非视图控制器类中获取可见/当前视图控制器?迅速

仅可见视图动画

如何使用 iCarousel 淡化 currentItem 之前的所有项目?

如何获取回收站当前可见项目位置

如何使 iCarousel 视图居中