В продолжении статьи, первую часть которой можно найти здесь мы мы рассмотрим следующие моменты:
- динамическая загрузка изображения с “UIImageView“,
- работа с массивами
Шаг 1
Откройте созданный в части 1 проект “Ball“.
Шаг 2
Импортируйте еще одно изображение в группу “Resources” (можно воспользоваться прежним, но гораздо интереснее будет добавить новое).
Шаг 3
Для хранения второго мяча нам потребуется еще одна переменная, поэтому откройте файл “BallViewController.h“. Назовем второй мяч “mBall2” (не самое удачное имя — в реальном приложении лучше иметь дело с массивами).
1 2 3 4 5 6 7 8 9 10 11
| #import
@class Ball;
@interface BallViewController : UIViewController {
IBOutlet Ball* mBall;
Ball* mBall2;
}
@property(retain, nonatomic) IBOutlet Ball* mBall;
@property(retain, nonatomic) Ball* mBall2;
@end |
Обратите внимание: модификатор “IBOutlet” мы не включаем, поскольку не будем ссылаться на “mBall2” из редактора Interface Builder. Впрочем, вреда от его присутствия не будет. Продолжить чтение »
Dashcode — еще один инструмент Apple iPhone SDK, предназначенный для создания простых приложений. В этом уроке на его примере мы рассмотрим анимацию и интерактивность (подразумевается знакомство с JavaScript и CSS).
В качестве примера возьмем фреймворк игры типа “космические пришельцы”: внизу экрана находится космический корабль, перемещаемый касаниями к экрану.
Создайте новый проект, воспользовавшись шаблоном “Custom“.
Создаем папку “Local Deploy”
Чтобы импортировать изображение корабля, проекту необходимо присвоить статус “Share“, — тогда Dashcode создаст папку размещения. Щелкните по пиктограмме “Share“.

Появится запрос на место сохранения/размещения. Продолжить чтение »
Иногда меня спрашивают, где взять iPhone SDK. Для начала вам понадобится:
- компьютер с Mac OS X Leopard;
- Xcode IDE (инструмент разработки от Apple)
- iPhone SDK
Сам iPhone для разработки не обязателен — в iPhone SDK предусмотрен симулятор устройства для запуска приложений iPhone. Однако планирующим тестировать приложения и продавать через магазин Apple без него не обойтись.
Нужен ли Мак для работы с Mac OS X Leopard? Я читал, что с этой ОС могут работать некоторые нетбуки, но сам не пробовал и не уверен, что это стоящий способ, особенно для новичков в мак-мире. Желающим попробовать свои силы в нестандартных подходах рекомендую следующие ссылки:
http://gadgets.boingboing.net/2008/12/17/osx-netbook-compatib.html
http://www.engadget.com/2008/10/03/dell-mini-9-hacked-to-run-os-x/
http://gizmodo.com/5156903/how-to-hackintosh-a-dell-mini-9-into-the-ultimate-os-x-netbook
Где взять Xcode?
На моем MacBook Pro ПО Xcode находится на втором установочном диске Mac OS X Leopard. Программа не устанавливается по умолчанию вместе Mac OS X Leopard — попробуйте сделать это с диска.
Есть вариант, что программа уже установлена (обычно это Macintosh HD::Developer::Application). Если такой папки нет, попробуйте воспользоваться Finder. Продолжить чтение »
В данной статье будут рассмотрены следующие темы:
- Работа с трансформацией
- Работа с “UIImageView“
- Установка интервала для анимации
- Привязка изображения к объектам
- Создание производного класса от “UIImageView“
Шаг 1
Командой “New Project” создайте новый проект. Выполните “iPhone OS Application -> View-Based Application” и присвойте проекту имя “Ball“.
Шаг 2
Импортируйте изображение в группу “Resources“. При работе с прозрачным png-файлом прозрачность будет сохранена. Я выбрал веселый мяч из [подборки]. Продолжить чтение »
Переходы в представлениях способны оживить любое приложение. На текущий момент таких внедренных переходов насчитывается четыре:
- Отворот вверх (UIViewAnimationTransitionCurlUp) — проверьте на iPhone приложение Maps, хотя это не самый удачный вариант. Все просто: при пролистывании страницы представление отворачивается снизу вверх.
- Отворот вниз (UIViewAnimationTransitionCurlDown)
- Переворот справа (UIViewAnimationTransitionFlipFromRight) — точно так, как в приложении Weather при нажатии кнопки “info”; переворот представления вокруг вертикальной оси.
- Переворот слева (UIViewAnimationTransitionFlipFromLeft)
Код настройки перехода для представления практически ничем не отличается от других разновидностей анимации (см. пример):
1 2 3 4 5 6 7 8
| [UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.5];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:placeholder cache:YES];
[view1 removeFromSuperview];
[placeholder addSubview:view2];
[view2 removeFromSuperview];
[placeholder addSubview:view1];
[UIView commitAnimations]; |
Представление с именем “placeholder” добавлено как часть “self.view” контроллера представления. “view1” и “view2” — два разных представления, между которыми осуществляется переход (от первого ко второму и наоборот). В процессе анимации / перехода представление переворачивается, скрывая “view1” и открывая “view2“. Находящиеся за ним элементы частично просматриваются. Анимация длится 1,5 с (настройка в “setAnimationDuration“). Продолжить чтение »
Касания обрабатываются тремя методами:
- touchesBegan:
- touchesMoved:
- touchesEnded:
Чтобы получить доступ к касаниям, нужно включить в код три этих метода (или один–два). Сам код не представляет собой ничего сложного:
1 2 3 4 5 6
| - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
} |
Метод “touchesBegan:” будет вызываться при касании пользователем экрана одним пальцем. Каждый раз декларируется новый метод: для второго пальца, уха, носа, ноги…
Метод “touchesEnded:” будет вызываться по окончании касания.
А вот с методом “touchesMoved:” все не так просто, как может показаться на первый взгляд. Данный метод действительно вызывается при перемещении касающегося экрана пальца, но на реальном устройстве это происходит практически сразу же после “touchesBegan“. Почему? На симуляторе iPhone роль пальца играет мышь: нажимаете/отпускаете кнопку мыши (сенсорную панель) — вызываются методы “touchesBegan” и “touchesEnded“, но не “touchesMoved” (если указатель мыши не смещался). При касании экрана iPhone / iPod в 99% случаев координаты начала и конца касания не совпадают, поэтому вызывается еще и метод “touchesMoved“. Продолжить чтение »
В приложении, над которым я сейчас работаю, есть небольшая панель с дополнительной информацией мелким шрифтом поверх изображения. Внедрена она, само собой, как объект “IView“, вложенный в качестве подпредставления subview во второй “UIView“. Код загружает интерфейс панели из отдельного xib-файла, размещая его в основном представлении:
1 2 3 4 5 6
| NSArray *nibContent = [[NSBundle mainBundle] loadNibNamed:@"Box"
owner:self options:NULL];
UIView* overlayBox1 = [nibContent objectAtIndex:0];
[worksheet addSubview:overlayBox1];
overlayBox1.center = worksheet.center;
overlayBox1.frame = CGRectOffset(overlayBox1.frame, 0, -140); |
Однако результат получается не совсем адекватным — налицо сильная размытость. В редакторе IB и симуляторе ее не видно, а в iPhone панель выглядит просто ужасно (см. фото). Многочасовые эксперименты с настройками и цветами шрифтов ничего не дали — как оказалось, сглаживание текста тут не причем. Уже догадались, в чем проблема? Порой такие моменты сложно осознать, пока не столкнешься с ними сам… Продолжить чтение »
В моем приложении Postcards есть меню дизайна, где можно настраивать цвета объектов. Соответственно, мне понадобился цветоподборщик. Такой инструмент практически на любой платформе легко создать на основе любого изображения цветовой палитры. Выводим его на экран, чтобы пользователь мог щелкнуть по нужному участку, и выполняем запрос типа getPixelColorAtScreenLocation(x,y).
Еще в 1983 г. можно было проделывать это на ZX-Spectrum, а вот в Cocoa Touch такая возможность не предусмотрена (если ошибаюсь, поправьте). Какие есть варианты?
Продолжить чтение »
Столкнувшись с вопросом о способах доступа к телефонной книге в iPhone, я решил уделить полчаса изучению темы. С результатами все желающие могут ознакомиться ниже.
Для начала создаем новое приложение “View-Based Application“, присваивая ему имя “addressBook“.

Теперь нужно настроить для проекта четыре спецификатора IBOutlet и один IBAction. Не забудем и о заголовочных файлах для фреймворка адресной книги. Итак, откройте “addressBookViewController.h” и отредактируйте код, как показано ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #import
#import
#import
@interface addressBookViewController : UIViewController {
IBOutlet UIButton *button;
IBOutlet UILabel *firstName;
IBOutlet UILabel *lastName;
IBOutlet UILabel *number;
}
-(IBAction)getContact;
@end |
Продолжить чтение »
В предыдущей статье я рассказал о настройке модели, узнать об изменениях свойств которой можно с помощью наблюдения за ключом/значением. С предложенным методом связана одна теоретическая проблема, на которую уже указали читатели: за все изменения модели отвечает всего один метод — “observeValueForKeyPath:ofObject:change:context:“. Как следствие, наблюдая за несколькими свойствами, получаем скопление операторов “if/else” или посредством оператора выбора выясняем, какие же именно изменения только что произошли. Поразмышляв об этом, я вспомнил о предложении передавать селекторы в качестве контекста при обращении к “addObserver“. Рассмотрим, как именно это делается.
Идея заключается в том, что для каждого свойства, за которым идет наблюдение, к запросу “addObserver” добавляется селектор (в параметрах контекста). В методе “observeValueForKeyPath…” выполняем селектор, например, запускаем метод. Тем самым мы привязываем каждое свойство к определенному методу, который и будет вызываться при изменении свойства.
Принимаемся за конструирование. Первая модель относительно проста:
1 2 3 4 5 6 7 8 9 10 11
| #import
@interface Model : NSObject {
BOOL propertyA;
BOOL propertyB;
}
@property BOOL propertyA;
@property BOOL propertyB;
@end |
Продолжить чтение »
|
Последние комментарии
Подскажите пожалуйста… Вот...
Код не открывает страницы по простой причине -...
можно было бы использовать сглаживание MSAA, графика была бы на...