SDK Фишки

Разные приемы, хаки использования iPhone SDK

Как определить общий и доступный размер дисковой памяти в iPhone

Определение общего объема дисковой памяти можно выполнить с помощью юниксовой функции statfs(), которая предоставляет всю необходимую информацию. Пример кода:

  1. #include <sys/param.h>
  2. #include <sys/mount.h>
  3.  
  4. +(float)getTotalDiskSpaceInBytes {
  5.         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  6.         struct statfs tStats;
  7.         statfs([[paths lastObject] cString], &tStats);
  8.         float totalSpace = (float)(tStats.f_blocks * tStats.f_bsize);
  9.  
  10.     return totalSpace;
  11. }

Устанавливаем высоту TableViewCells правильным способом

Чтобы изменить высоту ячейки в UITableView используем свойство rowHeight. Также, возможно сделать это в методе heightForRowAtIndexPath объекта типа UITableViewDelegate, но делать это таким способом не рекомендуется т.к. по заявлению Apple (см. док-цию) данная операция достаточно ресурсозатратная.

Используя heightForRowAtIndexPath метод можно создать таблицу с ячейками разной высоты. И если таблица имеет небольшой размер, то замедление в производительности будет не заметно, но чем больше таблица,

Подсчет числа касаний пользователя (одно, два, три касания.)

Привожу пример (не помню где нашел), который считает число последовательных касаний пользователя. Код определяет одно, два и три касания:

  1. -(void)oneTap
  2. {
  3.   NSLog(@"Single tap");
  4. }
  5.  
  6. -(void)twoTaps
  7. {
  8.   NSLog(@"Double tap");
  9. }
  10.  
  11. -(void)threeTaps
  12. {
  13.   NSLog(@"Triple tap");
  14. }
  15.  
  16. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  17. {
  18.   // Detect touch anywhere
  19.   UITouch *touch = [touches anyObject];
  20.  
  21.   switch ([touch tapCount])
  22.   {
  23.     case 1:
  24.       [self performSelector:@selector(oneTap) withObject:nil afterDelay:.5];
  25.       break;
  26.  
  27.     case 2:

Генерация случайного числа в iPhone

Рано или поздно все с данной задачей столкнуться. К сожалению, в Objective-C нет класс, который предоставлял бы методы для решения данной задачи, как это сделано в java. Данная задача решается через стандартные C функции: rand(), srand(), random(), srandom(), arc4random(). Пример:

  1. // генерить случайное число между 0 и 99
  2. int x = arc4random() % 100;
  3.  
  4. // генерить случайное число между 500 и 1000
  5. int y =  (arc4random() % 501) + 500);

ikirin аватар

Определяем длительность события "касания"

Возможно, будет многим полезно иметь на вооружение такую фишку, как определение длительности события "касания".

И так, создадим переменную NSTimeInterval, которая будет содержать время начала события. Далее создадим touchesBegan:

  1. // Переменная объекта
  2. NSTimeInterval touchStartTime;
  3.  
  4. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
  5. {
  6.   // время, когда событие произошло
  7.   touchStartTime = [event timestamp];
  8. }

Реализуем touchesEnded, где простым вычитанием определяем длительность касания:

Чтение файла из Application Bundle

Скажем у нас есть файл MyFile.txt (добавляем в Resources папку нашего Xcode проекта ). Прочитать его можно так:

  1. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"txt"];
  2. NSData *myData = [NSData dataWithContentsOfFile:filePath];
  3. if (myData) {
  4.         // do something useful
  5. }

Пример, как использовать MyFile.txt в качестве хелп файла отобразив его в UIWebView:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"HelpDoc" ofType:@"htm"];

ikirin аватар

Создаем Splash экран (заставку)

Достаточно частая задача и важная. Верно, куда приятней смотреть на картинку при старте приложения, чем на блеклый экран. И так, давайте расмотрим один из способов создания splash-экрана (для тех, кто не знает. splash-screen -это заставка).

Изображение

материал основан на http://adeem.me/blog/2009/06/22/creating-splash-screen-tutorial-for-iphone

  1. Создайте новый проект, назовите его Splash.
  2. Откройте SplashViewController.xib. Сделайте фон белым
  3. Если запустить приложение, то перед тем как мы увидем наш белый фон, мы увидем черный экран.

  4. Поместите Вашу картинку в папку resources Вашего проекта;
  5. Переименуйте картинку в Default.png;
  6. Теперь, при старте приложения будет показан не черный экран, как в прошлый раз, а картинка Default.png. Как видите, все достаточно просто и никаких танцев с бубном. Все дело в том, что iPhone SDK изначально заложена концепция отображения пользователю чего-либо пока приложение грузит в память необходимые для его работы данные.

Использование UITextField в UIAlertView

материал основа на http://icodeblog.com/2009/11/09/iphone-coding-tutorial-inserting-a-uitex...

Достаточно простой и полезный пример, как использовать текстовое поле UITextField в диалоге UIAlertView.
Наша цель получить результат показанный на скриншоте:

Изображение

Итак, создайте View Based Application приложение. Для однообразия предлагаю Вам его назвать TextFieldInAlert. Откройте файл TextFieldInAlert.m. Найдите метод -(void)viewDidLoad. Разкомментируйте и поместите в него код:

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@”Enter Name Here” message:@”this gets covered!
  4. delegate:self cancelButtonTitle:@”Dismiss” otherButtonTitles:@”OK!”, nil];
  5. UITextField *myTextField = [[UITextField alloc] initWithFrame:CGRectMake(12, 45, 260, 25)];
  6. [myTextField setBackgroundColor:[UIColor whiteColor]];
  7. [alert addSubview:myTextField];
  8. [alert show];
  9. [alert release];
  10. [myTextField release];
  11. }