인앱 설정 Table View Controller
이 포함 된 간단한 애플리케이션이 있습니다. 사용자가 "App Themes"셀을 선택하면 에 삽입 된 UICollectionView
으로 segues
(푸시)합니다.UICollectionView가 처음으로 눈에 띄는 지연 시간을 가지고 있습니다.
이것은 각 셀에 이미지, 레이블 및 해당 테마가 선택되면 체크 표시 이미지가있는 3x4 형식의 12 셀입니다.
세포는 여기 클래스 내에서 동적으로로드되지만 처음에는 UICollectionView
에 연결될 때 큰 지연이 있음을 눈치 챘을 것입니다. 계속되는 모든 시간 동안, 잘 작동하지만 아이폰 5에서는 몇 가지 극단적 인 눈에 띄는 지연이 있습니다. iOS 개발에 상당히 익숙합니다. 처음으로 뷰를 생성하는 방법과 관련이 있다는 느낌이 들지만, 확실하지 않아. 내 viewDidLoad
에서
, 나는이 다음 changeAppThemes 방법은 본질적으로 NSUserDefaults와 보는을 통해 순환되는
- (void)viewDidLoad
{
self.title = @"Themes";
self.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]};
[super viewDidLoad];
self.cView.dataSource = self;
self.cView.delegate = self;
self.themeLabels = [[NSArray alloc] initWithObjects:@"Original", @"Peacock", @"Mystical", @"Zebra", @"Simplicity", @"Rainbow", @"Prosperity", @"Leopard", @"Hypnotic", @"Dunes", @"Twirl", @"Oceanic", nil];
self.themeImages = @[[UIImage imageNamed:@"Newiphonebackground.png"], [UIImage imageNamed:@"peacock.png"], [UIImage imageNamed:@"Purplepink.png"], [UIImage imageNamed:@"PinkZebra.png"], [UIImage imageNamed:@"Greenish.png"], [UIImage imageNamed:@"MarblePrint.png"], [UIImage imageNamed:@"Prosperity.png"], [UIImage imageNamed:@"leopard.png"], [UIImage imageNamed:@"CircleEffect.png"], [UIImage imageNamed:@"Orange3.png"], [UIImage imageNamed:@"ReddishBlack.png"], [UIImage imageNamed:@"bluey.png"]];
[self changeAppThemes];
}
하는 테마를 적용 할 수 있습니다.
- (void)changeAppThemes
{
self.selectedTheme = [[NSUserDefaults standardUserDefaults] objectForKey:@"Theme"];
if ([self.selectedTheme isEqualToString:@"Mystical"])
{
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"Purplepink.png"]];
UIImage *navBackgroundImage = [[UIImage imageNamed: @"Purplepinknav"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[self.navigationController.navigationBar setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];
UIImage *tabBackground = [[UIImage imageNamed:@"SolidPurple.png"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[self.tabBarController.tabBar setBackgroundImage:tabBackground];
}
etc
viewWillAppear
은 다음과 같습니다
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self changeAppThemes];
self.selectedThemeString = [[NSUserDefaults standardUserDefaults] objectForKey:@"Selection"];
if ([self.selectedThemeString isEqualToString:@"Original"])
{
self.checkedIndexPath = [NSIndexPath indexPathForRow:0 inSection:0];
}
else if ([self.selectedThemeString isEqualToString:@"Oceanic"])
{
self.checkedIndexPath = [NSIndexPath indexPathForRow:11 inSection:0];
}
[self.cView reloadData];
}
viewWillAppear
오늘은 다른 코드없이 changeAppThemes
메서드 호출을했지만, 처음 UICollectionView
에 segueing 때 여전히 응답하지 전에.
cellForItemAtIndexPath
이다 : 나는 changeAppThemes
에 전화를 걸 경우
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
ThemeCell *themeCell = (ThemeCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Theme Cell" forIndexPath:indexPath];
NSString *cellData = [self.themeLabels objectAtIndex:indexPath.row];
themeCell.cellLabel.text = cellData;
themeCell.cellImages.image = self.themeImages[indexPath.row];
UIImageView *dot = [[UIImageView alloc]initWithFrame:CGRectMake(5, 0, 1, 2)];
dot.image=[UIImage imageNamed:@"check-white-hi.png"];
if([self.checkedIndexPath isEqual:indexPath])
{
NSLog(@"Loaded");
themeCell.backgroundView = dot;
[themeCell addSubview:dot];
}
else
{
NSLog(@"Not Loaded");
themeCell.backgroundView = nil;
}
내가 변화해야 하는가? viewWillAppear
에서 전화를 제거한 후 viewDidLoad
에 남겨 두었고 그 반대의 경우도 마찬가지입니다. 두 경우 모두 처음으로 UICollectionView
을 열면 응답 성은 매우 나빴습니다.
모든 의견은 정말 감사하겠습니다.
이미지 크기를 확인하십시오. – NeverBe
사실 매우 흥미로운 점입니다. 실제로 앱의 배경에 동일한 이미지를 사용하고 있습니다. 따라서 iPhone 5는이 컬렉션 셀의 이미지를 640x1136 크기로 표시합니다. 이제는 이미지 크기에 대해 언급 했으므로 조금 과장된 것 같습니다. 이미지의 크기를 크게 줄이고 테스트해야합니까? – amitsbajaj
디자인 한대로 이미지의 크기를 사용하십시오. 망막의 경우 2를 곱합니다. – NeverBe