Как реализовать функцию удаления изображений в разных позициях в iCarousel iphone

Я использую iCarousel, как показано здесь с типом карусели 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];
   
}

Пожалуйста, помогите мне.

введите здесь описание изображения


person Youngwing    schedule 28.06.2012    source источник
comment
удалить из массива? и что вы подразумеваете под удалением изображения из исходного положения.   -  person Bazinga    schedule 28.06.2012
comment
- (BOOL) carouselShouldWrap: (iCarousel *) carousel { return NO; } Я уже использую это в своем коде   -  person Youngwing    schedule 28.06.2012
comment
IT должен удалить, когда он находится в своей текущей позиции. Но с моим кодом он прокручивается до позиции caroselframe.   -  person Youngwing    schedule 28.06.2012
comment
Просто я могу редактировать или удалять изображение, которое находится в первой позиции моего видимого экрана.   -  person Youngwing    schedule 28.06.2012


Ответы (2)


Вы не должны удалять элемент в 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];
}
person Nick Lockwood    schedule 28.06.2012
comment
Я получаю эти предупреждения: несовместимый указатель на целочисленное преобразование, инициализирующее 'NSInteger' (он же 'int') с выражением типа 'id' [3] id') [3] и мое приложение разбилось.. - person Youngwing; 29.06.2012
comment
Ваш параметр отправителя должен иметь тип id, а не тип int, как это было в исходном коде. indexOfitemViewOrSubview должен иметь заглавную букву i после Of - это была опечатка с моей стороны. - person Nick Lockwood; 29.06.2012

Попробуй это:

    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;

to

carousel.type = iCarouselTypeLinear;

затем реализуйте это: [carousel reloadData];

person Bazinga    schedule 28.06.2012
comment
Пожалуйста, проверьте мое редактирование. Если я пытаюсь удалить изображение 1, оно удаляется. Когда я пытаюсь удалить 4-е изображение (изображение необходимо удалить) на снимке экрана, оно прокручивается до позиции первого изображения. - person Youngwing; 28.06.2012
comment
Вы хотите удалить его и сохранить его позицию? его автоматическое изменение положения при удалении элемента в iCarousel. - person Bazinga; 28.06.2012
comment
обернуть = НЕТ; здесь я получаю сообщение об ошибке, использование необъявленного переноса идентификатора - person Youngwing; 28.06.2012
comment
@property (nonatomic) BOOL wrap; в вашем .h, затем синтезируйте его в своем .m. - person Bazinga; 28.06.2012
comment
Извините, бесполезно, когда я прикасаюсь к изображению, оно прокручивается до положения кадра карусели, там я могу удалить .. - person Youngwing; 28.06.2012