#iphone #objective-c #cocoa-touch
#iPhone #objective-c #cocoa-touch
Вопрос:
Я пытался создать сетку на iPhone из изображений 16×16.
- (void)viewDidLoad {
[super viewDidLoad];
int xLocation = 0;
for (int i=0; i <= 619; i ) {
if (((i % 30) == 0) amp;amp; i != 0) { //if at end of column (30th row), moves x over 16 px to next column
xLocation = 16;
}
else {;}
CGRect imageRect = CGRectMake( xLocation, (16*i), 16, 16);
UIImageView *image = [[UIImageView alloc] initWithFrame:imageRect];
[image setImage:[UIImage imageNamed:@"Untitled-1.png"]];
[image setOpaque:YES];
NSLog(@"%d", xLocation);
[self.view addSubview:image];
[image release];
}
Проблема заключается в расположении int XL. По какой-то причине CGRectMake использует 0 в слоте с координатами x вместо xLocation. Я говорю «вместо», потому что приведенный ниже NSLog показывает, что xLocation имеет значения, которые я хочу, поэтому присвоение значений работает нормально. Что здесь происходит?
Ответ №1:
Приведение xLocation в качестве int в вашем NSLog, безусловно, сработает, но вы также могли бы использовать:
NSLog(@"imageRect %@", NSStringFromCGRect(imageRect));
Существует целый ряд вспомогательных функций NSStringFromXXX, которые время от времени пригодятся.
Ответ №2:
Местоположение XL равно 0 для первого столбца, и оно увеличивается для каждого столбца, но координата y не сбрасывается на 0 для каждого нового столбца. Он просто продолжает увеличиваться на основе i. Таким образом, столбцы, начиная со второго, находятся за пределами экрана в правильном месте xl, но имеют высокое значение y.
Попробуйте изменить вычисление imageRect на:
CGRect imageRect = CGRectMake( xLocation, (16*(i % 30)), 16, 16);
Комментарии:
1. Большое спасибо, я сосредоточился на xLocation, который на самом деле не был проблемой.
Ответ №3:
%d неправильно отображает значения float. Используйте %f или преобразуйте xLocation в int:
NSLog(@"%d", (int)xLocation);
Вы также можете упростить читаемость расчета xLocation, вычисляя его каждый раз, что-то вроде
16 * (i / 30)
Накладные расходы минимальны на современных процессорах.
Комментарии:
1.
xLocation
имеет типint
.