Nano Hash - криптовалюты, майнинг, программирование

Пейджинг UIScrollView загружает подвиды медленнее, чем прокрутка, как отменить жесты, задержку и т. д.?

При быстрой прокрутке прокрутки я не уверен, что содержимое загружается недостаточно быстро или рисунок пропускается, поскольку я генерирую новые подпредставления из проверки scrollViewDidEndDecelerating: (есть ли лучший метод?) Быстрая прокрутка не требуется! - я просто хочу решить проблемы, которые он вызывает.

Более длинное объяснение: у меня есть прокрутка с большим размером содержимого и включенным пейджингом. Для данной страницы добавляются три подпредставления с началом кадра в -1, 0, +1, умноженном на размер кадра (таким образом, средний кадр виден, остальные — следующая и предыдущая страница). Frame -1 и +1 — это ImageView, Frame 0 — это еще один UIScrollView с собственным подпредставлением ImageView. Они не являются подклассами.

По соображениям производительности мой подход состоит в том, чтобы проверить, движется ли прокрутка вперед или назад, и загрузить только новое изображение, поскольку два других уже загружены, я сохраняю их, например. «UIImage *tempImg1 = previousPageImageView.image» и возьмите их оттуда, как только будут добавлены подпредставления.

Теперь быстрая прокрутка приводит к тому, что новое изображение не появляется, но, что еще хуже, программа путается, по какому индексу оно должно быть, и вылетает. Я попробовал это с маленькими картинками, но та же проблема.

Пользователю не обязательно разрешена быстрая прокрутка, вероятно, будет достаточно игнорировать дальнейшие жесты смахивания после начала перемещения страницы до завершения загрузки.

Большое спасибо за идеи.

загрузка страницы:

-(void)loadSVforPage:(int)page
{
    int nextSVpage = page +1;
    int previousSVpage = page -1;
    int numberOfAssets = assets.count;

    ALAsset *displayAsset;
    ALAssetRepresentation *assetRep;
    CGFloat SVwidth = scrollLarge.frame.size.width;
    CGFloat SVheight = scrollLarge.frame.size.height;

    UIImage *tempImg1;
    UIImage *tempImg2;
    UIImage *tempImg3;
    UIImage *displayed;


    if (page != currentpage)
    {

        // if moves are +1 or -1 use temp images, else load all
        if (page == currentpage +1) // moving forward
        {
            //NSLog(@"page+");
            tempImg1 = nextSVImg;   // the former "next", which now becomes current
            tempImg3 = currentSVImg;  // the former "current", which now becomes previous

            if ((page+1 >=0) && (page+1 <= assets.count-1))  
            {
                displayAsset = [assets objectAtIndex:page+1];  // the "new next" image 
                assetRep = [displayAsset defaultRepresentation];
                tempImg2 = [ImageProcessing fullSizeImageForAssetRepresentation:assetRep];
            }
        }
        else if (page == currentpage -1) // moving backwards

        ....
        ....
        ....

        // LOAD PAGE+1 

        if (nextSVpage <= numberOfAssets-1)
        {
            displayed = tempImg2;

                nextSVImg = displayed;  // store the image for future scrolls

                CGRect frame = CGRectMake(nextSVpage * SVwidth, 0, SVwidth, SVheight);

                //old code adding UIImageViews
                //------------------------------
                //nextScrollImageView = [[UIImageView alloc]initWithFrame:frame];
                //[completeScrollableImageView addSubview:nextScrollImageView];
                //nextScrollImageView.image = displayed;

                // new code with subclassed UIView and image in drawRect
                //-------------------------------
                scrollUIViewNext = [[scrollviewImage alloc]initWithFrame:frame andImage:displayed];
                [completeScrollableImageView addSubview:scrollUIViewNext];

                ....
                ....
                ....

триггерная нагрузка:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    if (scrollView.tag == 0)  // the base SV
    {
        int pageNumber = floor(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);//+1;
        if (pageNumber != currentpage)
        {
            //NSLog(@"moved from current %i to %i",currentpage,pageNumber);
            [self loadSVforPage:pageNumber];
        }
    } 
}

  • Попробуйте создать свои подпредставления в scrollViewDidScroll. Проверьте этот ответ: stackoverflow.com/questions/15151721/ 20.03.2013
  • пробовал это раньше с той же проблемой, но, видимо, тем временем изменил остальной код, так что теперь он работает ... глупый я. Спасибо за помощь, еще многому предстоит научиться.. 21.03.2013
  • Может быть, у вас была другая ошибка где-то. Рад помочь. Я думаю, нет смысла создавать подпредставления в scrollViewDidEndDecelerating. Кстати, если вы добавите свой код, я дам правильный ответ, чтобы мы придерживались концепций переполнения стека. 21.03.2013
  • Я вспоминаю причину, по которой не использовал scrollViewDidScroll, так как у него гораздо больше задержек / заиканий, чем у scrollViewDidEndDecelerating, так что теперь это новая проблема, которая, я думаю, распространена, но как я могу ее решить? создание подкласса UIView вместо использования UIImageViews вообще не помогло (где-то это читал) 21.03.2013
  • Причина, по которой у вас больше отставаний, заключается в том, что загружается больше просмотров. Причина, по которой у вас отсутствовали представления с didEndDecelerating, заключается в том, что это вызывается только тогда, когда они перестают прокручиваться. Возможная золотая середина, поскольку вы сказали, что вам все равно, что это выглядит плохо, и просто не хотите, чтобы это запуталось, - это отслеживать количество страниц в didScroll и загружать в didEndDecelerating. Но опять же, это оставит пустые разделы, пока пользователь не замедлит их прокрутку. 21.03.2013
  • Это действительно помогает со страницами, аккуратно. Кстати, я не сказал, что меня не волнует, что это выглядит плохо, я сказал, что сверхбыстрая прокрутка не важна. Изображения, которые не отображаются на самом деле, это плохо. Приложение «Фотографии», по-видимому, не имеет проблем с ускорением через мои изображения высокого разрешения, в чем магия? 21.03.2013
  • @ pe60t0 ваш комментарий был правильным, если вы хотите опубликовать его как ответ, тай 24.03.2013

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..