iOS - Facebook POP: переместите ячейку просмотра таблицы в нижний правый угол

Может быть, вы можете помочь мне с проблемой.

Я использую новый фреймворк Facebook POP в приложении для iOS (7). У меня есть табличное представление с кнопкой "+" в каждой ячейке. Я хочу, чтобы, если пользователь нажимает на кнопку в ячейке, эта ячейка (копия этой ячейки) скользила в нижний правый угол (в последнем элементе вкладки) от 1 до 0. Как и "добавить в корзину" кнопка. Таким образом, пользователь знает, что строка добавлена ​​в корзину.

Кто-нибудь знает, как я могу сделать это с помощью Facebook POP Framework? Или вы можете указать мне правильное направление? Я думаю, что это не так сложно, но я не могу понять это.

Спасибо заранее!

1 ответ

Решение

Предполагая, что вы ссылаетесь на UITableView внутри UIViewController, который назначен как вкладка UITabBarController, сначала вы дублируете выбранную ячейку в UIView, а затем выполняете базовую анимацию POP следующим образом:

#import <math.h>
#import "POPAnimation.h"
#import "POPBasicAnimation.h"

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    UIView *view = [self duplicateCell:cell
                         ContentOffset:tableView.contentOffset
                                   Row:indexPath.row];

    [self.view addSubview:view];

    NSUInteger numberOfTabs = 3;
    CGFloat tabWidth  = self.view.frame.size.width / numberOfTabs;

    [self fadeOutView:view WhileMoveTo:CGRectMake(self.view.frame.size.width - tabWidth,
                                        tableView.frame.size.height,
                                        tabWidth,
                                        view.frame.size.height)];


}

- (UIView*)duplicateCell:(UITableViewCell*)cell ContentOffset:(CGPoint)offset Row:(NSInteger)row
{
    CGFloat cellHeight        = cell.frame.size.height;
    CGFloat topVisibleCellRow = (int)(offset.y / cellHeight) ;
    CGFloat delta             = fmodf(offset.y, cellHeight);
    CGRect frame              = cell.frame;
    frame.origin.y            = (row - topVisibleCellRow)*cellHeight - delta;

    UIView *view = [[UIView alloc] initWithFrame:frame];
    view.backgroundColor = [UIColor yellowColor];

    UILabel *label = [[UILabel alloc] initWithFrame:cell.textLabel.frame];
    label.textColor = [UIColor blackColor];
    label.text = cell.textLabel.text;
    label.contentMode = UIViewContentModeScaleAspectFit;

    [view addSubview:label];

    return view;
}

- (void)fadeOutView:(UIView*)view WhileMoveTo:(CGRect)rect
{
    [view pop_removeAllAnimations];

    POPBasicAnimation  *animFrame = [POPBasicAnimation animationWithPropertyNamed:kPOPViewFrame];
    POPBasicAnimation *animAlpha = [POPBasicAnimation animationWithPropertyNamed:kPOPViewAlpha];

    CGFloat fDuration = 1.5f;

    animFrame.toValue = [NSValue valueWithCGRect:rect];
    animFrame.duration = fDuration;
    animAlpha.toValue = @(0.0);
    animAlpha.duration = fDuration;

    [view pop_addAnimation:animFrame forKey:@"animateFrame"];
    [view pop_addAnimation:animAlpha forKey:@"animateAlpha"];
}        

Этот пример основан на базовом UITableViewCell, но вы можете адаптировать дублирование ячеек к любой пользовательской схеме ячейки.

Другие вопросы по тегам