向 iCarousel 项目添加自定义手势

Posted

技术标签:

【中文标题】向 iCarousel 项目添加自定义手势【英文标题】:Adding custom gesture to iCarousel items 【发布时间】:2014-04-26 19:42:25 【问题描述】:

嗨我已经使用 Xcode 有一段时间了,现在已经多次使用 UIGestureRecognizers。目前我正在开发一个需要轮播的 iPad 应用程序,所以有什么比使用 iCarousel 更好,因为我已经遇到过它,我认为它很棒。 我在将UISwipeGestureRecognizer 添加到轮播项目时遇到了一些问题(我会用它来删除“刷过”项目)。看起来很简单,但看起来UIGestureRecognizer 不存在,但如果打印 view.recognizer 我可以看到它实际上存在。我错过了什么? 对于任何语言错误,我们深表歉意!

代码

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view

    UILabel *nameLabel = nil;
    UILabel *notesLabel = nil;
    UIImageView *icon1 = nil;
    UIImageView *icon2 = nil;

    Notebook *referenceNotebook = [_notebookArray objectAtIndex:index];

    //create new view if no view is available for recycling
    if (view == nil)
    
        view = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 250.0f, 373.0f)];
        ((UIImageView *)view).image = [UIImage imageNamed:@"notebookBase"];
        view.contentMode = UIViewContentModeCenter;

        CGPoint startingPoint = view.frame.origin;
        CGSize startingSize = view.frame.size;

        nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(startingPoint.x, startingPoint.y + 60, startingSize.width, 100)];
        nameLabel.backgroundColor = [UIColor clearColor];
        nameLabel.textAlignment = NSTextAlignmentCenter;
        nameLabel.font = [FontController useFontKlinic_Light:50];
        nameLabel.tag = 1;
        [view addSubview:nameLabel];

        notesLabel = [[UILabel alloc]initWithFrame:CGRectMake(startingPoint.x, startingPoint.y + 95, startingSize.width, 100)];
        notesLabel.backgroundColor = [UIColor clearColor];
        notesLabel.textAlignment = NSTextAlignmentCenter;
        notesLabel.font = [FontController useFontKlinic_Light:30];
        [view addSubview:notesLabel];

        icon1 = [[UIImageView alloc] initWithFrame:CGRectMake(startingPoint.x + 105, startingPoint.y + 18, 40, 40)];
        icon1.image = [UIImage imageNamed:@"notebookIcon1"];
        [view addSubview:icon1];

        icon2 = [[UIImageView alloc] initWithFrame:CGRectMake(startingPoint.x + 105, startingPoint.y + 320, 40, 40)];
        icon2.image = [UIImage imageNamed:@"notebookIcon1"];
        [view addSubview:icon2];

        //UIView *swipeView = [[UIView alloc] initWithFrame:CGRectMake(startingPoint.x, startingPoint.y, startingSize.width, startingSize.height)];
        //swipeView.backgroundColor = [UIColor clearColor];

        //UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(carouselSwipewipeHandler:)];
        //[swipeRecognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
       // [swipeView addGestureRecognizer:swipeRecognizer];

        //[view addSubview:swipeView];
    
    else
    
        //get a reference to the label in the recycled view
        nameLabel = (UILabel *)[view viewWithTag:1];
    

    nameLabel.text = referenceNotebook.name;
    notesLabel.text = @"n note";

    UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(carouselSwipewipeHandler:)];
    [swipeRecognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
    [view addGestureRecognizer:swipeRecognizer];

    view.tag = index;
    NSLog(@"gesture recogs: %@", view.gestureRecognizers);
    return view;

有人知道我做错了什么吗? 这也是 iCarousel 文档的链接: https://github.com/nicklockwood/iCarousel#detecting-taps-on-item-views 提前致谢!

【问题讨论】:

【参考方案1】:

默认情况下,任何时候只能激活一个手势,并且轮播在内部使用手势进行滚动。因此,如果您想使用其他手势,您需要为您的手势和轮播手势添加一个代理,以便您可以使它们工作simultaneously。

【讨论】:

感谢 Wain 的快速回答和参考链接,我也找到了这个答案,总是here 在 SO 上。 是的,这基本上是相同的信息。对您来说唯一特别的事情是在轮播中找到手势。 这就是我想要的。非常感谢你。我的场景:我有轮播包含我的主视图,在一个视图中我有内部轮播,当我滚动到最后一项时,我需要能够将第一个主视图滚动到第二个主视图。但是当我回到上一个主视图并再次向右滚动内部轮播视图时,我将通过使用此手势识别器将 Scrollable 设置为 YES 来检测我正在向右滑动。

以上是关于向 iCarousel 项目添加自定义手势的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在 iCarousel 中添加自定义 UIView

将带有自动布局的自定义 UIView 添加到 iCarousel

为 iCarousel 使用自定义 UIView

使用 iCarousel 时,我的自定义 UIView 显示但里面啥都没有?

如何实现自定义的icarousel效果

自定义表格视图单元格中特定元素的手势