Remove UIViewController from UIScrollView?
Posted
by tobi
on Stack Overflow
See other posts from Stack Overflow
or by tobi
Published on 2010-06-01T17:23:55Z
Indexed on
2010/06/01
21:03 UTC
Read the original article
Hit count: 398
Hi, i add different View with (setPageID) to a ScrollView, but know i get a Memory problem on rotaion and i want to remove the actualy not showed view... how can i do this or how can i remove the memory problem?
Thanks!!!
- (void)setPageID:(int)page
{
if (page < 0) return;
if (page >= self.listOfItems.count) return;
CGFloat cx = 0;
ScrollingViewStep *controller = [viewControllers objectAtIndex:page];
if ((NSNull *)controller == [NSNull null]) {
controller = [[ScrollingViewStep alloc] init];
[viewControllers replaceObjectAtIndex:page withObject:controller];
[controller release];
}
if (nil == controller.view.superview) {
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)
{
cx = 768.0 * page;
controller.view.frame = CGRectMake(cx, 0.0 , 768.0f, 926.0f);
}
else
{
cx = 1024.0 * page;
controller.view.frame = CGRectMake(cx, 0.0 , 1024.0f, 670.0f);
}
[controller setView:ItemID PageID:page Text:[[self.listOfItems objectAtIndex:page] objectForKey:@"step"]];
[scrollView addSubview:controller.view];
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
CGFloat cx2 = 0;
for (int i = 0; i < [self.viewControllers count]; i++) {
ScrollingViewStep *viewController = [self.viewControllers objectAtIndex:i];
if ((NSNull *)viewController != [NSNull null])
{
if([[UIDevice currentDevice] orientation] == UIDeviceOrientationPortrait || [[UIDevice currentDevice] orientation] == UIDeviceOrientationPortraitUpsideDown)
{
cx2 = 768.0 * i;
viewController.view.frame = CGRectMake(cx2, 0.0 , 768.0f, 926.0f);
[viewController repos];
}
else
{
cx2 = 1024.0 * i;
viewController.view.frame = CGRectMake(cx2, 0.0 , 1024.0f, 670.0f);
[viewController repos];
}
}
}
if((interfaceOrientation == UIInterfaceOrientationPortrait) ||
(interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown))
{
CGRect frame = scrollView.frame;
frame.origin.x = 768 * currentPageInScrollview;
frame.origin.y = 0;
[scrollView scrollRectToVisible:frame animated:NO];
}
else {
CGRect frame = scrollView.frame;
frame.origin.x = 1024 * currentPageInScrollview;
[scrollView scrollRectToVisible:frame animated:NO];
}
pageControlIsChangingPage = YES;
return YES;
}
- (void)didReceiveMemoryWarning {
int currentPage = currentPageInScrollview;
NSLog(@"MEMORY");
// unload the views+controllers which are no longer visible
UIViewController *l;
for (int i = 0; i < [self.viewControllers count]; i++) {
ScrollingViewStep* viewController = [self.viewControllers objectAtIndex:i];
if((NSNull *)viewController != [NSNull null])
{
if(i < currentPage-1 || i > currentPage+1)
{
[self.viewControllers replaceObjectAtIndex:i withObject:[NSNull null]];
}
}
}
[super didReceiveMemoryWarning];
}
© Stack Overflow or respective owner