@anonymous22

SwipeVIew проблема

Пытаюсь разобраться в SwipeView, возникла проблема при использовании в своем проекте, использую следующий код из примера (Paging example):

-(void)viewDidLoad{
    [super viewDidLoad];

    _swipeView.pagingEnabled = YES;
}

- (NSInteger)numberOfItemsInSwipeView:(SwipeView *)swipeView{
    return [_items count];
}

- (UIView *)swipeView:(SwipeView *)swipeView viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view{

    //create new view if no view is available for recycling
    if (view == nil)
    {
        //don't do anything specific to the index within
        //this `if (view == nil) {...}` statement because the view will be
        //recycled and used with other index values later
        view = [[UIView alloc] initWithFrame:self.swipeView.bounds];
        view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    }

    //set background color
    CGFloat red = arc4random() / (CGFloat)INT_MAX;
    CGFloat green = arc4random() / (CGFloat)INT_MAX;
    CGFloat blue = arc4random() / (CGFloat)INT_MAX;
    view.backgroundColor = [UIColor colorWithRed:red
                                           green:green
                                            blue:blue
                                           alpha:1.0];

    return view;
}

- (CGSize)swipeViewItemSize:(SwipeView *)swipeView
{
    return self.swipeView.bounds.size;
}


Приложение падает с ошибкой: CALayer position contains NaN: [nan 284] и указывает на линию с
view.center = CGPointMake(center.x, _scrollView.frame.size.height/2.0f);
.

Весь метод:
- (void)setFrameForView:(UIView *)view atIndex:(NSInteger)index
{
    if (self.window)
    {
        CGPoint center = view.center;
        
        if (_vertical)
        {
            center.y = ([self offsetForItemAtIndex:index] + 0.5f) * _itemSize.height + _scrollView.contentOffset.y;
        }
        else
        {
            center.x = ([self offsetForItemAtIndex:index] + 0.5f) * _itemSize.width + _scrollView.contentOffset.x;// center.x NAN
        }
        
        BOOL disableAnimation = !CGPointEqualToPoint(center, view.center);
        BOOL animationEnabled = [UIView areAnimationsEnabled];
        if (disableAnimation && animationEnabled) [UIView setAnimationsEnabled:NO];
        
        if (_vertical)
        {
            view.center = CGPointMake(_scrollView.frame.size.width/2.0f, center.y);
        }
        else
        {
            view.center = CGPointMake(center.x, _scrollView.frame.size.height/2.0f);
        }
        
        view.bounds = CGRectMake(0.0f, 0.0f, _itemSize.width, _itemSize.height);
        
        if (disableAnimation && animationEnabled) [UIView setAnimationsEnabled:YES];
    }
}


При использовании брекпойнтов показывает, что center.x в определенный момент становится NAN(в коменте указал где). Не могу понять в чем проблема, вроде делаю все как в примере. Прошу помочь разобраться что делать.

EDIT:
Нашел причину проблемы: это связано с тем, что есть Navigation segue из начального ViewControllera в VC c SwipeView.

Github
  • Вопрос задан
  • 2737 просмотров
Решения вопроса 1
@anonymous22 Автор вопроса
Я пытаюсь разобраться почему это происходит, но одно из решений этой проблемы это добавить [self.view addSubview:_swipeView] в свой viewDidLoad метод. Я думаю что проблема с жизненным циклом и в какой последовательности происходит загрузка в самом swipeView.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы