Как заставить ICarousel скользить один раз для одного изображения

Я использую ICarousel для создания своего электронного альбома. Когда вы перемещаете альбом, ICarousel по умолчанию устанавливает, что он перемещается на некоторое расстояние. Мне нужно слайд один раз только для одного изображения. Я обнаружил, что ICarousel не основан на ScrollView, поэтому я не могу понять, как достичь своей цели, знает ли кто-нибудь об этом?


person itenyh    schedule 17.05.2012    source источник


Ответы (5)


Я бы рекомендовал отключить встроенную прокрутку и подключить PanGestureRecognizer, использующий метод scrollByNumberofItems.

[iCarousel setScrollEnabled:NO];

Затем внутри вашегоgestRecognizer:

[iCarousel scrollByNumberOfItems:1 duration:0.25];

Я попробовал это сам, и это сработало отлично.

person MobileVet    schedule 17.05.2012
comment
Где вы пишете этот код? [Прокрутка iCarouselByNumberOfItems: 1 продолжительность: 0,25]; - person Luda; 24.05.2013
comment
Где бы вы ни решили, что хотите, чтобы карусель прокручивалась. Для меня это было внутри PanGestureRecognizer. Когда жест был распознан, я запустил прокрутку карусели с помощью приведенной выше строки кода. - person MobileVet; 03.06.2013

Обновленный ответ с более поздними версиями iCarousel:

iCarousel теперь поддерживает прокрутку одной страницы, установив pagingEnabled=YES.

person Vincent NOCK    schedule 06.07.2015

Похоже, вам придется использовать другую библиотеку под названием SwipeView, реализованную тем же автором.

Проблема была найдена здесь. https://github.com/nicklockwood/iCarousel/issues/247

person Nimit Pattanasri    schedule 04.12.2012

Я добился этого для типа iCarouselTypeCoverFlow, установив:

//In ViewController.m
self.carousel.pagingEnabled = YES;


//In iCarousel.m change for smooth animation
-(void)scrollByOffset:(CGFloat)offset duration:(NSTimeInterbal)duration{
    if (duration > 0.0)
    {
        _decelerating = NO;
        _scrolling = YES;
        _startTime = CACurrentMediaTime();
        _startOffset = _scrollOffset;
//        _scrollDuration = duration;
// set constant duration instead
        _scrollDuration = 1.0;
        _endOffset = _startOffset + offset;
        if (!_wrapEnabled)
        {
            _endOffset = [self clampedOffset:_endOffset];
        }
        [_delegate carouselWillBeginScrollingAnimation:self];
        [self startAnimation];
    }
    else
    {
        self.scrollOffset += offset;
    }
}
person blaszku    schedule 09.09.2016

Изменить исходный код iCarousel Файл iCarousel.m может сделать это!

- (void)didPan:(UIPanGestureRecognizer *)panGesture {

 ......

     case UIGestureRecognizerStateChanged: {
            CGFloat translation = _vertical? [panGesture translationInView:self].y: [panGesture translationInView:self].x;

            translation = translation * 0.35; // Add This line to change the really translation.

            ......
     }
}

Это решает мою проблему, надеюсь помочь вам!

person Beyond Chao    schedule 03.07.2017