“下一张”和上一张图片的 UIButton 和操作
Posted
技术标签:
【中文标题】“下一张”和上一张图片的 UIButton 和操作【英文标题】:UIButton and action for "next' and previous image 【发布时间】:2011-05-30 22:27:43 【问题描述】:所以,对于 iPhone 开发和学习来说,它还是个新手。我知道我想要什么,但不知道从哪里开始。在这个项目之前我真的只处理过 tableView 应用程序,所以我对 imageView 和自定义操作的实际知识非常缺乏!
我想让 UIImageView 加载图像(使用由 fetchedResultsController 填充的数组,因为图像将存储在 CoreData DB 中)。
我想要一个带有“下一个”动作的 UIButton 和一个带有“上一个”动作的 UIButton,它们将控制前面提到的 imageViews 显示的图像。
到目前为止,我已经完成了 DB 映射和界面设计,但未能找到这些问题的答案(我相信这对于知道的人来说是相当直接的)。
任何建议或示例代码将不胜感激。
去酒化
@shawnwall 代码 sn-p 从下面...
-(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];
【问题讨论】:
【参考方案1】:在 .xib 中放置两个 UIButton(如果您使用的是 IB)。
在您的视图控制器 .h 中创建两个 IBAction:
-(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 将这些操作链接到按钮的“内部修饰”事件。这将使这些事件触发。
【讨论】:
不错的肖沃尔!这是第一步√。现在有关于生成动作逻辑的想法吗?我发现这似乎可以满足我的要求,但我不会有静态数量的图像,因为用户将能够添加图像 static int index = 0; //
只需使用 [arrayOfImages count] 获取数组计数。【参考方案2】:
将图像放入数组中,并将当前图像的索引放在变量中
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.
我认为应该这样做。
-- 编辑:
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
【讨论】:
感谢您慷慨的投入。努力让从核心数据存储中检索到的图像立即放入一个可变数组中(叹息.....)当我通过这个障碍时,它会爆炸! 它没有发生,伙计:(。我在上面添加了更多代码 sn-ps 以阐明我的设置是否有效。我不明白 currentPhotoIndex 的值是如何定义的(我添加了一个 NSUInteger 到h。)另外,当下一个和上一个落在数组之外时,你将如何阻止它? 忘了接受你的工作答案,我的坏家伙,谢谢你的建议!以上是关于“下一张”和上一张图片的 UIButton 和操作的主要内容,如果未能解决你的问题,请参考以下文章
当点击“上一张”和“下一张”按钮时,图片框里的图片按顺序更换下一张,点一次更换一次。 还求一个代码,当点击按钮或图片时随机更换成其它图片。