Hi
I've been working with Xcode for a while and used UIGestureRecognizers many times now. At this moment i'm developing an iPad app that needs a carousel in it, so what's better then using iCarousel as i've already encountered it and I think it's great.
I'm having some issues adding to the carousel items a UISwipeGestureRecognizer (I would use it to delete the "swiped" item). Would look easy but it just looks like the UIGestureRecognizer is not there, but if print view.recognizer I can see it is actually there. What am I missing? And sorry for any language mistakes!

The code

- (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;
}


Anyone with an idea of what I am doing wrong? Here's also a link to the iCarousel documentation: https://github.com/nicklockwood/iCarousel#detecting-taps-on-item-views

Thanks in advance!

有帮助吗?

解决方案

Only one gesture can be active at any one time by default, and the carousel uses a gesture internally for scrolling. So, if you want to use other gestures you need to add a delegate to your gesture and the the carousel gesture so that you can make them work simultaneously.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top