如何为iCarousel iphone中不同位置的图像实现删除功能

Posted

技术标签:

【中文标题】如何为iCarousel iphone中不同位置的图像实现删除功能【英文标题】:How to implement delete functionality for images in different positions in iCarousel iphone 【发布时间】:2012-06-28 08:53:59 【问题描述】:

我正在使用 iCarousel,如 here 所示,带有轮播类型 Liner Carousel 并实现了删除功能。我能够删除轮播中的图像,当我尝试删除可见屏幕中的任何其他图像时,它被移动到轮播框架并删除。 我需要将图片从原来的位置删除。

- (void)loadView 

    [super loadView];

    self.view.backgroundColor = [UIColor blackColor];
    
    carousel = [[iCarousel alloc] initWithFrame:CGRectMake(-130,300, 320, 100)];
    carousel.dataSource = self;
    carousel.delegate=self;
    carousel.type = iCarouselTypeLinear;
    carousel.scrollEnabled=YES;

    imageView=[[UIImageView alloc]initWithFrame:CGRectMake(60, 50, 200, 200)];
    [self.view addSubview:imageView];




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

    UIImage *image = [imagesArray objectAtIndex:index];

    UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0,0, 60, 60); 
    [button setBackgroundImage:image forState:UIControlStateNormal];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    button.titleLabel.font = [button.titleLabel.font fontWithSize:50];
    [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
    button.tag=index;
    NSLog(@"tag is %d",button.tag);
        
    UIButton *deleteButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    deleteButton.frame= CGRectMake(50, -5, 20 ,20);
    UIImage *img = [UIImage imageNamed:@"close.png"];
    [deleteButton setImage:img forState:UIControlStateNormal];
    [deleteButton addTarget:self action:@selector(deleteButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    [button addSubview:deleteButton];
        
    return button;


-(void)deleteButtonClicked:(int )sender

    NSInteger currentIndex = carousel.currentItemIndex;
    [carousel removeItemAtIndex:currentIndex animated:YES];
   

请帮帮我。

【问题讨论】:

从数组中删除?以及从原始位置删除图像是什么意思。 - (BOOL)carouselShouldWrap:(iCarousel *)carousel return NO;我已经在我的代码中使用了这个 当它处于当前位置时应该删除它。但是使用我的代码,它会滚动到 caroselframe 位置。 我可以简单地编辑或删除位于可见屏幕第一位置的图像 【参考方案1】:

您不应该删除 carousel.currentItemIndex 处的项目,因为这不是与您单击的按钮对应的项目,它只是轮播中当前居中的项目。

要为您单击的按钮获取正确的项目索引,请执行以下操作:

-(void)deleteButtonClicked:(id)sender

    //get the index of the item view containing the button that was clicked
    NSInteger index = [carousel indexOfItemViewOrSubview:sender];

    //update the data model (always do this first)
    [imagesArray removeObjectAtIndex:index];

    //remove item from carousel
    [carousel removeItemAtIndex:index animated:YES];

【讨论】:

我收到这些警告警告:指向整数转换的不兼容指针使用“id”类型的表达式初始化“NSInteger”(又名“int”)[3] 警告:实例方法“-indexOfitemViewOrSubview:”未找到(返回类型默认为 'id')[3] 并且我的应用程序崩溃了.. 您的 sender 参数必须是 id 类型,而不是原始代码中的 int 类型。 indexOfitemViewOrSubview 在“Of”之后应该有一个大写的“i”——这是我的错字。【参考方案2】:

试试这个:

    NSInteger index = carousel.currentItemIndex;
    [carousel removeItemAtIndex:index animated:YES];
    [imagesArray removeObjectAtIndex:index];

也添加这个:

- (void)awakeFromNib
    
    if (self) 
        //set up carousel data
         wrap = NO;
    

或者做你的

carousel.type = iCarouselTypeCustom;

carousel.type = iCarouselTypeLinear;

然后实现这个:[carousel reloadData];

【讨论】:

请检查我的编辑。如果我尝试删除图像1,它正在被删除,当我尝试删除屏幕截图中的第四张图像(需要删除的图像)时,它会滚动到第一个图像位置. 您想删除它并保留它的位置吗?当您删除 iCarousel 中的项目时,它会自动重新定位。 换行 = 否;在这里我得到了错误,使用未声明的标识符包装 @property (nonatomic) BOOL wrap; 在你的 .h 中,然后在你的 .m 中合成它。 对不起没用,当我触摸图像时,它会滚动到轮播框位置,在那里我可以删除..

以上是关于如何为iCarousel iphone中不同位置的图像实现删除功能的主要内容,如果未能解决你的问题,请参考以下文章

如何为 iCarousel 的气缸中的车轮旋转设置计时器

(Swift) 如何为单独的 iCarousels 分配特定数量的项目?

具有每个图像反射的 iCarousel

如何为 iPhone 6+、6 和 5 指定不同的尺寸?

如何为一个应用显示不同的名称?我想在 Iphone 和 App 中显示应用程序的名称

如何为不同的屏幕尺寸创建具有自动布局的比例视图?