Еще одна статья от Алекса Краковецкого о разработке для iPhone.

Здесь представлены базовые примеры, с которыми приходиться сталкиваться практически каждый день программистам для iPhone.

Logging

Для того, чтобы увидеть логи, необходимо выбрать Run > Console в Xcode .

NSLog(@"log: %@ ", myString); // для переменных типа NSString
NSLog(@"log: %f ", myFloat); // для переменных типа float
NSLog(@"log: %i ", myInt); // для переменных типа int

Добавление изображения

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 109.0f);
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
[myImage setImage:[UIImage imageNamed:@"myImage.png"]];
myImage.opaque = YES;
[self.view addSubview:myImage];
[myImage release];

Добавление UIWebView

CGRect webFrame = CGRectMake(0.0, 0.0, 320.0, 460.0);
UIWebView *webView = [[UIWebView alloc] initWithFrame:webFrame];
[webView setBackgroundColor:[UIColor whiteColor]];
NSString *urlAddress = @"<a href="http://www.google.com/">http://www.google.com</a>";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj]; [self addSubview:webView];
[webView release];

Отображение статуса Network Activity

IApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES; // для остановки уставите значение в NO

Конвертация NSInteger в NSString

currentScoreLabel.text = [NSString stringWithFormat:@"%d", currentScore];

Подвижные (draggable) элементы

  1. Создаем новый класс который наследуется от UIImageView
    @interface myDraggableImage : UIImageView { }
  2. В реализации этого класса добавляем два метода:
    - (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 	 	
        // Retrieve the touch point
        CGPoint pt = [[touches anyObject] locationInView:self];
        startLocation = pt;
        [[self superview] bringSubviewToFront:self];
    }
    - (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { 	 	
        // Move relative to the original touch point
        CGPoint pt = [[touches anyObject] locationInView:self];
        CGRect frame = [self frame];
        frame.origin.x += pt.x - startLocation.x;
        frame.origin.y += pt.y - startLocation.y;
        [self setFrame:frame];
    }
    
  3. Создайте изображение (или то, что вам необходимо) и добавьте ее к вашему view:
    dragger = [[myDraggableImage alloc] initWithFrame:myDragRect];
    [dragger setImage:[UIImage imageNamed:@"myImage.png"]];
    [dragger setUserInteractionEnabled:YES];
    

Потоки (Threading)

  1. Создайте новый поток:
    [NSThread detachNewThreadSelector:@selector(<strong>myMethod</strong>)  toTarget:self withObject:nil];
    
  2. Создайте новый метод, который указан в потоке:
    - (void)<strong>myMethod</strong> {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        // *** code that should be run in the new thread goes here ***
        [pool release];
    }
    

Таймеры

Таймер, который будет запускаться раз в секунду:

[NSTimer scheduledTimerWithTimeInterval:1  	target:self selector:@selector(<strong>myMethod</strong>)  	userInfo:nil  	repeats:YES];

Если нужно передать какой то параметр в вашу функцию, необходимо использовать следующий код:

[NSTimer scheduledTimerWithTimeInterval:1  	target:self selector:@selector(<strong>myMethod</strong>)  	userInfo: myObject repeats:YES];

Далее создаете функцию, которая будет запускаться по таймеру:

-(void)myMethod:(NSTimer*)timer {
    // Now I can access all the properties and methods of myObject
    [[timer userInfo] myObjectMethod];
}

Останавливаем таймер:

[myTimer invalidate];
myTimer = nil; // ensures we never invalidate an already invalid Timer

Время

CFAbsoluteTime myCurrentTime = CFAbsoluteTimeGetCurrent();
// perform calculations here

Уведомления (Alerts)

Простейшое уведомление с кнопкой ОК:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"An Alert!"  		delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];

Определение Subview

Для этого небходимо использовать tag для views:

for (UIImageView *anImage in [self.view subviews]) {
    if (anImage.tag == 1)  {
        // do something
    }
}

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

В.

Вышел MonoTouch 1.2 – .NET для iPhone

Вышла новая версия средств разработки iPhone приложений на платформе .NET – MonoTouch 1.2. Наконец-то добавили нормальный отладчик с интеграцией в MonoDevelop и отлаживать теперь можно и в симуляторе и на устройстве.

MonoTouch 1.2 Debugger

  • Появился новый Binding API, который позволяет связывать библиотеки на Objective-C с приложением на .NET/MonoTouch.
  • Добавлены пространства имен System.Timers.Timer, System.Threading.Semaphore, System.Threading.
  • Исправлены ошибки, OpenTK обновлен до r2350
  • Добавлено пространство имен System.Data и теперь можно использовать SQLite в своих приложениях.

Ссылки

©

W.

Web разработка под iPhone

Сегодня у нас статья Андрея Реброва о различных инструментариях Web-разработки для мобильных устройств вцелом и iPhone в частности.

Введение

Пока все Интернет сообщество со всех сторон продолжает обсуждать, как же можно приспособить iPad для работы, я бы хотел все же вернуться к iPhone. По профессии я программист и люблю новые технологии. И очень мне уж хотелось сделать приложение для своего телефона, но вот как-то душа к Objective C не лежит пока что, да и макбука с лицензией разработчика тоже пока нет. И мне стало интересно, могу ли используя знания html и js написать что-нибудь. Оказалось что да, и способов очень даже много. О них – под катом.

Способ первый – просто и со вкусом

Само собой, можно просто написать веб сайт и его адаптировать. Об этом на Хабре уже писали. К написанному в той статье мне бы хотелось добавить две вещи.

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

db = openDatabase("TestDB", "1.0", "HTML5 Database", 200000);

В функцию создания базы данных передаются следующие параметры:

  • Название базы данных
  • Ее версия
  • Отображаемое имя
  • Размер в байтах

Далее открываем транзакцию и выполняем нужные нам действия

db.transaction(function(tx)
    {
      tx.executeSql("DELETE FROM tbl_test WHERE id = ?", [item.id]);
    });

Во-вторых, стоит сказать об оффлайновом режиме работы с помощью создания manifest-файла. Подробно об этом можно прочитать на сайте Apple.
Вкратце что это такое. Манифест это обыкновенный файл, такой же, как например, css или js, содержащий в себе информацию о кэше приложения. Когда вы первый раз заходите на страницу, ресурсы, указанные в этом файле кэшируются.

Теперь как все выглядит на деле:

  1. Указываем ссылку на файл на нужной нам странице
    <html manifest="demo.manifest">
    
  2. Создаем сам файл.
    CACHE MANIFEST
    
    demoimages/clownfish.jpg
    demoimages/clownfishsmall.jpg
    demoimages/flowingrock.jpg
    demoimages/flowingrocksmall.jpg
    demoimages/stones.jpg
    demoimages/stonessmall.jpg
    

    И после этого все работает. С кэшем можно работать — апдейтить его, обрабатывать события и так далее. Все это мне очень понравилось, но мне стало интересно, а есть ли какие-то специальные фреймворки. Оказалось есть.

Способ второй — jQTouch

О jQTouch уже немного писали. Хочу рассказать немного подробнее о том, что он умеет.

jQTouch — Это такой плагин к известному Javascript-фреймворку jQuery, позволяющий очень просто создавать веб-приложения для тачфонов — телефонов с сенсорным экраном, причём с пальцеориентированным интерфейсом. Каким и является iPhone. А так же HTC Hero, Dream, Magic — на Android — и куча разных WM-коммуникаторов с оболочками. © (оригинал)

Перечислю основные фишки:

  • Очень легко управлять поведением компонент
  • Есть возможность создавать темы
  • Есть небольшое взаимодействие с телефоном — например можно узнать его ориентацию
  • Поддерживается анимация и различные фишки интерфейса айфона
  • Это jQuery и этим все сказано

Плагин очень приятный, но все таки на выходе мы имеем не полноценное приложение. Почему? У нас нет доступа к таким вещам как акселерометр, вибрация, звук и так далее. После этого я снова полез в гугл и нашел такую отличную вещь как PhoneGap.

Способ третий — PhoneGap

Суть данного фреймворка состоит в том, что написав один раз приложение с помощью html и js, мы сможем транслировать его в приложение под нужную платформу. А платформы он поддерживает вот такие: iPhone, Android, Blackberry (OS 4.5), Symbian, Windows Mobile, Palm, Maemo. В случае айфона мы опять возвращаемся к тому, с чего начали — нужен макбук, лицензия и все дела. Но фреймворк все равно отличный.

Ниже представлен roadmap данного проекта.

Приятный бонусом данного продукта является наличие симулятора, на котором можно оттестировать написанное приложение. Рекомендую поставить и поиграться.

Необходимость трансляции немного напрягала и дальнейшие поиски вывели меня на конкурента PhoneGap — MotherApp

Способ четвертый — MotherApp

Суть этого проекта такова:

  • Пишем приложение с использованием предложенной js-библиотеки
  • Устанавливаем все что нужно на сервер
  • И самое главное — отдаем ссылку на свое приложение парням из MotherApp, которые все за нас транслируют

Как видите, сервис хорошо монетизирован =)
А если серьезно вполне серьезная и мощная по своим возможностям вещь. По ссылке список возможностей с картинками.

Как говорил один персонаж, становится все любопыственнее и любопытсвеннее. Уже из спортивного интереса, я нашел почти то что искал:

  • Возможность написания на html и js
  • Полное отсутствие трансляции
  • Возможность использовать функции телефона

И как всегда было одно но. Сначала необходимо поставить отдельное приложение на айфон, чтобы запустить свое. И я говорю о Big5.

Способ пятый — Big5

Здесь все еще проще.
Пишем свое приложение с использованием js-библиотеки, скачиваем приложение из аппсторе и вводим адрес своего сайта.
В своей сути, big5 — это альтернативный бразуер, но с доступом к нативным функциям телефона. Большой вопрос, как к этом отнесется Apple и не повторится ли здесь судьба PhoneGap. Но факт остается фактом, написав веб приложение, мы в итоге получаем полноценное приложение под айфон. Насколько полноценное зависит от пользователя, так как в аппстор есть две версии приложения big5: бесплатная lite и платная за 10$.
На сайте big5 заявлено, что разработка под их приложение, это просто веб разработка, так что все что было описано в первом пункте так же справедливо и тут.

Ну и в завершении, хочется представить еще одного кандидата. Но он, пожалуй, больше придется по душе тем, кто выбрал Ruby on rails. Итак, встречайте — Rhodes.

Способ отдельный — Rhodes

Этот продукт отчасти напоминает процессом своей разработки, который представлен ниже, MotherApp.

Rhodes опять же работает со всеми нативными вещами, вплоть до файловой системы. Поддерживает он следующие платформы: iPhone, Windows Mobile, BlackBerry, Symbian и Android. Язык у данного фреймворка очень похож на ruby, так что рубисты дерзайте. Пока что сложно найти какие либо отзывы.

И в завершении, тем, кого данная тема увлечет, хочу порекомендовать книгу от O`Reilly — Building iPhone Apps with HTML, CSS, and Javascript
Making App Store Apps Without Objective-C or Cocoa
. По ссылке ее официальный электронный вариант.

Спасибо за внимание!

Статья “Разработка под Mac OS X и iPhone” в блоге автора.