当循环仍在iPhone SDK上运行时,如何显示图像?
我基本上是在JSON上获取图像,然后将其显示在屏幕上。在我当前的代码中,它工作正常,只是在我的当循环仍在iPhone SDK上运行时,如何显示图像?,iphone,objective-c,xcode,image,loops,Iphone,Objective C,Xcode,Image,Loops,我基本上是在JSON上获取图像,然后将其显示在屏幕上。在我当前的代码中,它工作正常,只是在我的while循环之后显示图像 我想要的是每次循环迭代时显示图像。如果可能的话,也可以像苹果的trailes.app一样显示淡出的图像 这是我目前的代码: - (void)getNowShowingList2 { self.navigationItem.rightBarButtonItem = nil; UIActivityIndicatorView *activityIndicator
while
循环之后显示图像
我想要的是每次循环迭代时显示图像。如果可能的话,也可以像苹果的trailes.app一样显示淡出的图像
这是我目前的代码:
- (void)getNowShowingList2
{
self.navigationItem.rightBarButtonItem = nil;
UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
activityIndicator.hidesWhenStopped = YES;
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];
NSString *str = HOMEVIEW_URL;
NSURL *url = [NSURL URLWithString:str];
NSData *data = [NSData dataWithContentsOfURL:url];
NSString *jsonStr = [[[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding] autorelease];
// Checks for internet connectivity at startup
if ([jsonStr isEqualToString:@""])
{
HideNetworkActivityIndicator();
[self performSelectorOnMainThread:@selector(networkConnectivityCheck)
withObject:nil
waitUntilDone:YES];
}
else
{
// Parse the string into JSON
NSDictionary *json = [jsonStr JSONValue];
// Get all object
NSArray *items = [json valueForKeyPath:@"QUERY.DATA"];
NSEnumerator *enumerator = [items objectEnumerator];
NSArray *item;
while (item = [enumerator nextObject])
{
[myMovieId addObject:[item objectAtIndex:0]];
[myMovieTitle addObject:[item objectAtIndex:1]];
NSString *genre = @"";
if (genre == NULL)
{
genre = @"";
}
else
{
genre = [item objectAtIndex:2];
}
[myGenre addObject:genre];
[myCast addObject:[item objectAtIndex:3]];
[myPrice addObject:[item objectAtIndex:4]];
[myRuntime addObject:[item objectAtIndex:5]];
[myImageUrl addObject:[item objectAtIndex:6]];
[myRating addObject:[item objectAtIndex:7]];
[myHits addObject:[item objectAtIndex:8]];
NSURL *url = [NSURL URLWithString:[item objectAtIndex:6]];
NSData *data = [NSData dataWithContentsOfURL:url];
if (data == nil) // checks if internet connection was lost while parsing & fetching
{
HideNetworkActivityIndicator();
[self performSelectorOnMainThread:@selector(lostPrompt)
withObject:self
waitUntilDone:YES];
break;
}
else
{
[myImage addObject:[UIImage imageWithData:data]];
[self getMovieDetails:[item objectAtIndex:0]];
}
NSLog(@"O");
[self displayButton2];
}
activityIndicator.hidden = YES;
self.navigationItem.rightBarButtonItem = self.refreshButton;
}
[self performSelectorOnMainThread:@selector(versionCheck)
withObject:nil
waitUntilDone:YES];
}
- (void)displayButton2
{
int offset_x = 19;
int offset_y = 24;
for (int i = 0; i < [myImage count] ; i++)
{
// compute x & y offset
if (i % 3 == 0)
{
offset_x = 19;
}
else if (i % 3 == 1)
{
offset_x = 113;
}
else
{
offset_x = 208;
}
// Display Movie Thumbnail
UIImage *imageView1 = [myImage objectAtIndex:i];
CGRect myImageRect1 = CGRectMake(offset_x, offset_y, MOVIE_THUMBNAIL_W, MOVIE_THUMBNAIL_H);
UIButton *button1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
button1.frame = myImageRect1;
button1.backgroundColor = [UIColor clearColor];
[button1 setBackgroundImage:imageView1 forState:UIControlStateNormal];
button1.tag = i;
[button1 addTarget:self
action:@selector(imageButtonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[scrollview addSubview:button1];
// Quick Buy Image
UIImage *buy_image = QUICK_BUY_BUTTON;
CGRect myImageRect2 = CGRectMake(offset_x + (MOVIE_THUMBNAIL_W-QUICK_BUY_BUTTON_W-2), offset_y + 2, QUICK_BUY_BUTTON_W, QUICK_BUY_BUTTON_H);
UIButton *button2 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
button2.frame = myImageRect2;
button2.backgroundColor = [UIColor clearColor];
[button2 setBackgroundImage:buy_image forState:UIControlStateNormal];
button2.tag = i;
[button2 addTarget:self
action:@selector(quickBuyButtonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[scrollview addSubview:button2];
// increment offset
if (offset_x == 208)
{
offset_y += 150;
}
}
if ((offset_x == 19) || (offset_x == 113))
{
offset_y += 158;
}
// Adjust scroll view
[scrollview setContentSize:CGSizeMake(0, offset_y + 10)];
// adjust background
[background setFrame:CGRectMake(13, 13, 294, offset_y - 17)];
backgroundHeightAdjust = offset_y - 17;
}
-(void)getNowShowingList2
{
self.navigationItem.rightBarButtonItem=nil;
UIActivityIndicatorView*activityIndicator=[[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0,0,20,20)];
activityIndicator.hidesWhenStopped=是;
uiBarButtonim*barButton=[[uiBarButtonim alloc]initWithCustomView:activityIndicator];
[self-navigationItem].rightBarButtonItem=barButton;
[活动指示器启动激活];
NSString*str=HOMEVIEW\u URL;
NSURL*url=[NSURL URLWithString:str];
NSData*data=[NSData dataWithContentsOfURL:url];
NSString*jsonStr=[[[NSString alloc]initWithData:data
编码:NSUTF8StringEncoding]自动释放];
//启动时检查internet连接
if([jsonStr isEqualToString:@”“]))
{
HideNetworkActivityIndicator();
[self-performSelectorOnMainThread:@selector(网络连接检查)
withObject:零
waitUntilDone:是的;
}
其他的
{
//将字符串解析为JSON
NSDictionary*json=[jsonStr JSONValue];
//获取所有对象
NSArray*items=[json valueForKeyPath:@“QUERY.DATA”];
N分子*枚举数=[items objectEnumerator];
NSArray*项目;
while(项=[enumerator nextObject])
{
[myMovieId addObject:[item objectAtIndex:0]];
[myMovieTitle添加对象:[项目对象索引:1]];
NSString*流派=@;
如果(类型==NULL)
{
体裁=@;
}
其他的
{
类型=[项目对象索引:2];
}
[我的流派添加对象:流派];
[myCast addObject:[item objectAtIndex:3]];
[myPrice addObject:[项目对象索引:4]];
[myRuntime addObject:[item objectAtIndex:5]];
[myImageUrl addObject:[item objectAtIndex:6]];
[myRating addObject:[项目对象索引:7]];
[myHits addObject:[item objectAtIndex:8]];
NSURL*url=[NSURL URLWithString:[item objectAtIndex:6]];
NSData*data=[NSData dataWithContentsOfURL:url];
if(data==nil)//检查在解析和获取时是否丢失了internet连接
{
HideNetworkActivityIndicator();
[self-performSelectorOnMainThread:@selector(lostPrompt)
withObject:自我
waitUntilDone:是的;
打破
}
其他的
{
[myImage添加对象:[UIImage imageWithData:data]];
[self-getMovieDetails:[项目对象索引:0]];
}
NSLog(@“O”);
[自显示按钮2];
}
activityIndicator.hidden=是;
self.navigationItem.rightBarButtonItem=self.refreshButton;
}
[self-performSelectorOnMainThread:@selector(versionCheck)
withObject:零
waitUntilDone:是的;
}
-(无效)显示按钮2
{
int offset_x=19;
int offset_y=24;
对于(int i=0;i<[myImage count];i++)
{
//计算x&y偏移量
如果(i%3==0)
{
偏移量_x=19;
}
else if(i%3==1)
{
偏移量_x=113;
}
其他的
{
偏移量_x=208;
}
//显示电影缩略图
UIImage*imageView1=[myImage objectAtIndex:i];
CGRect myImageRect1=CGRectMake(偏移量x、偏移量y、电影缩略图W、电影缩略图H);
UIButton*button1=[[UIButton Button类型:UIButtonTypeCustom]retain];
button1.frame=myImageRect1;
button1.backgroundColor=[UIColor clearColor];
[按钮1设置背景图像:状态的imageView1:uicontrol状态正常];
按钮1.tag=i;
[按钮1添加目标:自我
操作:@选择器(按下ImageButton:)
forControlEvents:UIControlEventTouchUpInside];
[滚动视图添加子视图:按钮1];
//快速购买图像
UIImage*购买图像=快速购买按钮;
CGRect myImageRect2=CGRectMake(偏移量x+(电影缩略图W-QUICK-BUY按钮W-2)、偏移量y+2、QUICK-BUY按钮W、QUICK-BUY按钮H);
UIButton*button2=[[UIButton按钮类型:UIButtonTypeCustom]retain];
button2.frame=myImageRect2;
button2.backgroundColor=[UIColor clearColor];
[按钮2挫折背景图像:购买状态的图像:uicontrol状态正常];
按钮2.tag=i;
[按钮2添加目标:自我
操作:@选择器(按下QuickBuyButton:)
forControlEvents:UIControlEventTouchUpInside];
[滚动视图添加子视图:按钮2];
//增量偏移
如果(偏移量x==208)
{
偏移量_y+=150;
}
}
如果((偏移量_x==19)| |(偏移量_x==113))
{
偏移量_y+=158;
}
//调整滚动视图
[scrollview setContentSize:CGSizeMake(0,偏移量y+10)];
//调整背景
[背景设置帧:CGRectMake(13,13,294,偏移量_y-17)];
背景高度调整=偏移量y-17;
}
从长远来看,我还计划使用AFNetworking,因为它可能有助于实现我想要达到的效果 在后台线程中解析JSON。每次需要加载图像时,将其设置为主线程中的image
imageView
...
// Parse the string into JSON
[self performSelectorInBackground:@selector(parseJson:) withObject:jsonStr];
// ...
-(void)parseJson:(NSString*)jsonStr{
// Parse Json ...
// Show image on main thread
[self performSelectorOnMainThread:@selector(showImage:)
withObject:image
waitUntilDone:NO];
}
-(void)showImage:(UIImage *)image{
imageView.image = image;
}
谢谢W