UIScrollview images бесконечная прокрутка (загрузка изображения) проблема ios

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

Я попытался использовать этот код и изменил UILabel на UIImageview и назвал загрузку асинхронного изображения в прокрутке в scrollViewDidEndDecelerating - Цикл прокрутки изображения , один с тремя страницами. Он хорошо работает с примером «текстовой метки», но когда я асинхронно загружаю изображения (также кэшированные), тогда появляется мерцание на прокрутке.

Предположим, что если я прокручиваю страницу со страницы 0 на страницу 1, тогда страница 0 мерцает немного, а затем снова появляется страница 1.

Любая идея, как избавиться от этой проблемы?

0
nl ja de
Извините, смена изображения с эффектом слайда?
добавлено автор Reno Jones, источник
Делать все, кроме слайда. В конце концов, это наверняка удвоит мерцание.
добавлено автор Reno Jones, источник
попробуйте изменить изображение с помощью слайд-эффекта
добавлено автор amar, источник
Взгляните на изображение и поменяйте его на слайд-анимацию
добавлено автор amar, источник

2 ответы

Для моего класса .m вам нужно представление, и в этом представлении добавляется imageViewSlider (uiimageview). объедините его с индикатором активности и отсоедините изображение, посмотрите, работает ли оно. Это реализует слайд без просмотра прокрутки

#import "ImageSliderView.h"
#import 
#define kAnimationKey @"animationKey"
@interface ImageSliderView ()

@end

@implementation ImageSliderView
@synthesize imageData;
@synthesize imageViewSlider;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
       //Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
   //Set GestureRecoginzer..
    //******************************************************Swipe recognisers**************************
    UISwipeGestureRecognizer *rightRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeHandle:)];

    rightRecognizer.direction=UISwipeGestureRecognizerDirectionRight;

    [rightRecognizer setNumberOfTouchesRequired:1];

    [self.view addGestureRecognizer:rightRecognizer];

    [rightRecognizer release];

    UISwipeGestureRecognizer *leftRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeHandle:)];

    leftRecognizer.direction=UISwipeGestureRecognizerDirectionLeft;

    [leftRecognizer setNumberOfTouchesRequired:1];

    [self.view addGestureRecognizer:leftRecognizer];

    [leftRecognizer release];

    //******************************************************
    currentPage=0;
       //Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [self setImageData:nil];
    [self setImageViewSlider:nil];
    [super viewDidUnload];
   //Release any retained subviews of the main view.
   //e.g. self.myOutlet = nil;
}
-(void)dealloc
{
    [imageData release];
    [imageViewSlider release];
    [super dealloc];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}




#pragma mark ---swipe
-(void)swipeHandle:(UISwipeGestureRecognizer *)guestureRecognizer
{
    if(guestureRecognizer.direction==UISwipeGestureRecognizerDirectionLeft)
    {

         [self nextButtonAndSlideForwad];

    }
    if(guestureRecognizer.direction==UISwipeGestureRecognizerDirectionRight)
    {
                [self prevButtonAndSlideBack];
    }

}



-(void)nextButtonAndSlideForwad
{


    self.imageViewSlider.backgroundColor=[UIColor redColor];
            [self slideForward];



}

-(void)prevButtonAndSlideBack
{
    self.imageViewSlider.backgroundColor=[UIColor greenColor];
    [self slideBackward];
}

-(void)slideForward
{
    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromRight];
    [animation setDuration:0.4f];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
    [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1]; 
    [[self.view layer] addAnimation:animation forKey:kAnimationKey];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.55];
    [UIView commitAnimations];


}

-(void)slideBackward
{

    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromLeft];
    [animation setDuration:0.4f];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
    [self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0]; 
    [[self.view layer] addAnimation:animation forKey:kAnimationKey];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.55];
    [UIView commitAnimations];

}

@end
0
добавлено

Попробуйте добавить изображение с помощью текущей главной очереди:

dispatch_async(dispatch_get_main_queue(), ^{
    [self.scrollView addSubview:imageView];
});
0
добавлено
Я уже делаю это через gcd и добавляю его в основной поток. благодаря
добавлено автор Reno Jones, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.