objective c - force UIScrollView to update -
i'm stuck problem have serie of pages of characterview class going straight uiscrollview.
loading part performance intensive, because of reason tried manage aid of threading scenario.
intention load requested page (es. 5th page out of 10) , starting load pages of uiscrollview there , showing on screen, recurring somehow , load +1 / -1 (respectively 6 , 4) , show'em on screen , in second recursion load +2 / -2 ( 7th , 3rd ) , show'em on screen , on..
this code:
-(void)loadpagesdrillingfrompage:(nsinteger) page { self.viewcontrollers = [[[nsmutablearray alloc] init] autorelease]; (unsigned = 0; < [pageids count]; i++) { [self.viewcontrollers addobject:[nsnull null]]; } pagecontrol.numberofpages = [pageids count]; didpreparepagescontainer = yes; if (kpreloadallpages && !threadisloadingpages) { threadisloadingpages = yes; nsnumber *startingpage = [nsnumber numberwithint:page]; nsmutablearray *preloadedpages = [[[nsmutablearray alloc] init] autorelease]; [nsthread detachnewthreadselector:@selector(drillpagesfrom:) totarget:self withobject:startingpage]; } }
as can see in function declare start calling thread selector drillpagesfrom:(nsnumber*)page, defined ad follows:
-(void)drillpagesfrom:(nsnumber *) page { nsinteger pg = [page intvalue]; characterview *controller = [self.viewcontrollers objectatindex:pg]; if((nsnull *)controller != [nsnull null]) return; nsautoreleasepool *pool = [[nsautoreleasepool alloc] init]; nslog(@"drilling page %i", pg); controller = [[characterview alloc] initwithnibname:@"characterview" bundle:[nsbundle mainbundle]]; controller.didload = no; controller.position = pg; controller.containeritemscount = [self.pageids count]; controller.delegate = self; cgrect frame = self.scrollview.frame; frame.origin.x = frame.size.width * pg; frame.origin.y = 0; controller.view.frame = frame; [controller setcat_name:self.cat_name]; [controller fetchcharacter:[self.pageids objectatindex:pg] withmoc:self._context]; [self.viewcontrollers replaceobjectatindex:pg withobject:controller]; [self performselectoronmainthread:@selector(updatescrollview:) withobject:controller waituntildone:no]; [controller release]; if(pg > 1)// && !threadreachedfirstpage) { nsnumber *prevpg = [nsnumber numberwithint:pg-1]; [self drillpagesfrom:prevpg]; } if(pg < [self.pageids count]-1)// && !threadreachedlastpage) { nsnumber *nextpg = [nsnumber numberwithint:pg+1]; [self drillpagesfrom:nextpg]; } [pool release]; }
after various tests i've tried force redraw of uiscrollview calling main thread, can notice in code above
[self performselectoronmainthread:@selector(updatescrollview:) withobject:controller waituntildone:no];
the function updatescrollview
- (void) updatescrollview:(characterview *)controller { [self.scrollview addsubview:[controller view]]; [self.scrollview setneedsdisplay]; }
despite of code still waits load pages before displaying n screen, very annoying because see blank space ~2 sec.
hoping explains issue in clear way,
i'm thanking in advance.
cheers
k
what want use tiled scroll view. let have content needs displayed on screen loaded @ once. check out scrollviewsuite sample code on apple's site.
Comments
Post a Comment