Кнопка UIB и действие для «следующего» и предыдущего изображения - PullRequest
0 голосов
/ 31 мая 2011

Итак, новичок в iPhone dev и обучение постоянно.Я знаю, чего хочу, но не знаю, с чего начать.До этого проекта я имел дело только с приложениями tableView, поэтому мне очень не хватает практических знаний о imageView и пользовательских действиях!

Я хочу загрузить UIImageView с изображением (используя массив, заполненный fetchedResultsController какизображения будут храниться в базе данных CoreData).

Я хочу UIButton с действием «next» и UIButton с действием «previous», которые будут управлять отображаемым изображением ранее упомянутого imageViews.

Пока что у меня есть отображение БД и дизайн интерфейса, ноЯ не могу найти ответ на эти вопросы (я уверен, что это будет довольно просто для тех, кто знает).

Буду очень признателен за любой совет или пример кода.

DetartrateD

@ фрагмент кода shawnwall снизу ...

-(IBAction)nextImage { 
    index++; 
    int imageCount=31; 
    if (index<=imageCount) { 
        NSString* imageName=[NSString stringWithFormat:@"img%i.jpg", index];
        [picture setImage: [UIImage imageNamed: imageName]]; 
    } 
} 

Изменяемый массив, добавленный в viewDidLoad:

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Images"      inManagedObjectContext:managedObjectContext];
[request setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"topImage" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptor release];
[sortDescriptors release];

NSError *error = nil;
NSMutableArray *mutableFetchResultsT = [[managedObjectContext executeFetchRequest:request error:&error]mutableCopy];
if (mutableFetchResultsT == nil) {
}

[self setTopImageArray:mutableFetchResultsT];

NSLog(@"%i" , [topImageArray count]);

Изображение добавляется вмассив здесь:

Images *imageS = (Images *)[NSEntityDescription insertNewObjectForEntityForName:@"Images" inManagedObjectContext:managedObjectContext];

imageS.topImage = selectedImage;


[topImageArray insertObject:imageS.topImage atIndex:0];

NSLog(@"%i" , [topImageArray count]);

... ...

Тот же метод, но после создания эскиза я вызываю:

[self updateTopIV];

Что:

-(void)updateTopIV 
{
topIV.image = [topImageArray objectAtIndex:0];
}

У меня есть 2 кнопки действий (следующая / предыдущая):

- (IBAction)nextTouch
{
[self showPhoto:1]; 
}

- (IBAction)previousTouch
{
[self showPhoto:-1];
}


 - (void)showPhoto:(NSInteger)numberToAdd
{
    topIV.image = [topImageArray objectAtIndex:currentPhotoIndex + numberToAdd];

}

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Поместите два UIButton на ваш взгляд в .xib (если вы используете IB).

Создайте два IBAction в вашем контроллере вида .h:

-(IBAction)nextClicked:(id)sender;
-(IBAction)prevClicked:(id)sender;

и .m:

-(IBAction)nextClicked:(id)sender
{
  //do stuff
  imageView.image = whatever;
}

-(IBAction)prevClicked:(id)sender
{
  //do stuff
  imageView.image = whatever;
}

Далее, свяжите эти действия с «подправкой внутри»событие кнопок через IB.Это сделает эти события пожарными.

0 голосов
/ 31 мая 2011

Поместить изображения в массив и индекс текущего изображения в переменной

NSInteger *currentPhotoIndex;

- (IBAction)nextTouch
{
    [self showPhoto:1]; // number to add to current, so 1 for next, -1 for previous
}

- (IBAction)previousTouch
{
    [self showPhoto:-1];
}


// Actual "Logic"

- (void)showPhoto:(NSInteger)numberToAdd
{
    NSArray *arrayOfImages = allTheImagesYouWantToShow
    UIImageView.image = [arrayOfImages objectAtIndex:currentPhotoIndex + numberToAdd];
    // Adding one or subtracting one from the current image's index will show the photo
    immediately before or after it. With this method, you can also skip around to any
    number you want.
}

Я думаю, что это должно сделать.

- EDIT:

currentPhotoIndex должен быть определен в вашем заголовочном файле, как вы сделали. Это должно быть установлено в положение в массиве первого изображения, которое вы показываете. Пока давайте предположим, что это первый.

При первом показе изображения сделайте следующее:

currentPhotoIndex = [arrayOfImages indexOfObject:thePhotoI'mShowingRightNow];

Кроме того, хороший улов. Чтобы предотвратить выход NSInteger за пределы массива, вам нужно что-то вроде этого:

- (void)showPhoto:(NSInteger)numberToAdd
{
    if (currentPhotoIndex > 0 && < arrayOfImages.count) // Makes sure that the int is within the array
    {
        // Show new image
    }
}
...