菜鸟教程小白 发表于 2022-12-12 10:03:49

ios - iPad 上的 iCarousel 性能问题


                                            <p><p>我正在使用 Nick Lockwood 的 <a href="https://github.com/nicklockwood/iCarousel" rel="noreferrer noopener nofollow">iCarousel</a>对于 iPad 应用程序。现在它只是 15 张全屏图片的轮播。</p>

<p>我设置了一个单 View 项目,在 Storyboard中添加 iCarouselView ,将其 ViewController 添加为数据源,并将此代码用于数据源方法:</p>

<pre><code>- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel {
    return 15;
}

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view {
    UIImage* img = ];
    UIImageView* imgView = [ initWithImage:img];

    return imgView;
}
</code></pre>

<p>这可行,但是当我第一次滚动浏览所有项目时,您会注意到在将新项目添加到轮播时性能会受到一点影响。我第二次检查所有项目时不会发生这种情况。</p>

<p>您可以在此分析器屏幕截图中看到我的意思。前半部分的峰值是我第一次滚动浏览所有图像,然后我再次滚动,没有峰值,也没有性能损失。</p>

<p>我该如何解决这个问题?</p>

<p> <img src="/image/fViNu.png" alt="enter image description here"/> </p>

<p><strong>编辑</strong></p>

<p>我隔离了仪器上的一个峰,这是调用树</p>

<p> <img src="/image/GOPRX.png" alt="enter image description here"/> </p>

<p><strong>编辑</strong></p>

<p>带有 jcesar 建议的代码</p>

<pre><code>- (void)viewDidLoad {
    ;

    NSMutableArray* urls_aux = [ init];
    for (int i = 0; i&lt;15; i++) {
      NSString *urlPath = [ pathForResource: ofType:@&#34;jpg&#34;];
      NSURL *url = ;

      ;
    }
    self.urls = urls_aux.copy;

    self.carousel.dataSource = self;
    self.carousel.type = iCarouselTypeLinear;
}

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

    if (view == nil) {
      view = [[ initWithFrame:CGRectMake(0, 0, 1024, 768)] autorelease];
      view.contentMode = UIViewContentModeScaleAspectFit;
    }

    [ cancelLoadingImagesForTarget:view];
    ((AsyncImageView *)view).imageURL = ;

    return view;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我不认为这是一个非常正统的解决方案,但它确实有效。 </p>

<p>我所做的是使用 iCarousel 的方法 <code>insertItemAtIndex:animated:</code> 在设置时一次添加一个图像。然后性能受到打击,但之后一切顺利。</p>

<pre><code>- (void)viewDidLoad
{
    ;

    self.images = [ init];
    self.carousel.dataSource = self;
    self.carousel.type = iCarouselTypeLinear;

    for (int i = 0; i&lt;15; i++) {
      UIImage* img = ];
      ;
      ;
    }
}

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel {
    return self.images.count;
}

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view {
    UIImage* img = ;
    UIImageView* imgView = [ initWithImage:img];

    return imgView;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - iPad 上的 iCarousel 性能问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15831148/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15831148/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - iPad 上的 iCarousel 性能问题