В этой теме я расскажу как создавать виджеты для iOS 5.(Необходим установленный Theos )
Для примера нам нужен будетшаблон .После скачивание переименвываем его в template и переносим его в пользовательскую директорию.
Содержимое шаблона:
1)ярлык theos(оригинал в /opt/theos),необходим для компиляции
2).mm файл,реализация виджета
3)header.h файл,интерфейс виджета
4)BBWeeAppController-Protocol.h, протокол,содержащий private API для создания виджета
5)layout,там все для создания .deb
6)Makefile,мейкфайл
Откроем протокол:
Единственный обязательный метод -(id)view, остальные не обязательные
Так-как -(id)view является required методом,значит он должен быть обязательно реализован в .m(.mm) файле.Вообще этот метод отвечает за отображение нашего виджета.
Посмотрим пример его реализации.Открываем .mm файл в шаблоне.
Реализация метода -(id)view
Сначала проверяем вид на пустоту
Далее первым делом создаем наш вью.
CGRectMake(2, 0, 316, 71),это стандартные значения для виджета,но 71 можем поменять например на 90,чтобы изменить его высоту.
Затем создаем UIImage для бекграунда:
Создаем UIImageView для отображения нашего бекграунда:
Прикрепляем bgView к виду нашего виджета:
Создаем надпись на виджете:
Возвращаем наш вид.
Это всего лишь пример реализации,вы можете делать что вашей фантазии угодно.
Интересные опциональные методы:
1)- (float)viewHeight;-отвечает за высоту
Реализация:
- (float)viewHeight{
return 71.0f;
}
2)- (void)willRotateToInterfaceOrientation:(int)arg1;
- (void)willAnimateRotationToInterfaceOrientation:(int)arg1;
- (void)didRotateFromInterfaceOrientation:(int)arg1;
Методы отвечающие за ориентацию виджета в зависимости от ориентации девайса
3)- (id)launchURL;
- (id)launchURLForTapLocation:(struct CGPoint)arg1;
Очень интересные методы,отвечают за переход на URL по тапу на виджет(- (id)launchURL;) и по тапу на область(- (id)launchURLForTapLocation:(struct CGPoint)arg1;)
Реализация 1 метода:
- (NSURL*)launchURL{
return [NSURL URLWithString:@"cydia://"];//тап на виджет перенесет вас в сидию
}
Проверяем наш шаблон.
Запускаем Terminal.app
Вводим
Enter
После удачного компилирования,в папке template появится папка obj,в ней будет лежать WeeAppTest.dylib,через свойства файла убираем разрешение .dylib, полученный WeeAppTest копируем в layout/System/Library/WeeAppPlugins/WeeAppTest.bundle
Для тех кто еще не освоился с theos,скомпиленный виджетhttp://d.pr/Eqtf (.bundle в архиве)
После этого по ssh(или как вам удобней) переносим WeeAppTest.bundle на ваш девайс под управлением iOS5 в System/Library/WeeAppPlugins/ .Делаем респринг.Виджет должен появится в центре уведомлений.Пробуем нажать на виджет,нас перенесет в Cydia
Для примера нам нужен будет
Содержимое шаблона:
1)ярлык theos(оригинал в /opt/theos),необходим для компиляции
2).mm файл,реализация виджета
3)header.h файл,интерфейс виджета
4)BBWeeAppController-Protocol.h, протокол,содержащий private API для создания виджета
5)layout,там все для создания .deb
6)Makefile,мейкфайл
Откроем протокол:
@protocol BBWeeAppController <NSObject> - (id)view; @optional - (float)viewHeight; - (void)viewWillAppear; - (void)viewDidAppear; - (void)viewWillDisappear; - (void)viewDidDisappear; - (void)willRotateToInterfaceOrientation:(int)arg1; - (void)willAnimateRotationToInterfaceOrientation:(int)arg1; - (void)didRotateFromInterfaceOrientation:(int)arg1; - (void)loadPlaceholderView; - (void)loadFullView; - (void)unloadView; - (void)loadView; - (id)launchURL; - (id)launchURLForTapLocation:(struct CGPoint)arg1; @end |
Единственный обязательный метод -(id)view, остальные не обязательные
Так-как -(id)view является required методом,значит он должен быть обязательно реализован в .m(.mm) файле.Вообще этот метод отвечает за отображение нашего виджета.
Посмотрим пример его реализации.Открываем .mm файл в шаблоне.
Реализация метода -(id)view
- (UIView *)view { if (_view == nil) { _view = [[UIView alloc] initWithFrame:CGRectMake(2, 0, 316, 71)]; UIImage *bg = [[UIImage imageWithContentsOfFile:@"/System/Library/WeeAppPlugins/WeeAppTest.bundle/WeeAppBackground.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:71]; UIImageView *bgView = [[UIImageView alloc] initWithImage:bg];//Бекграунд виджета bgView.frame = CGRectMake(0, 0, 316, 71); [_view addSubview:bgView]; [bgView release]; UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 316, 71)]; lbl.backgroundColor = [UIColor clearColor]; lbl.textColor = [UIColor whiteColor]; lbl.text = @"iT0ny's Test Widget"; lbl.textAlignment = UITextAlignmentCenter; [_view addSubview:lbl]; [lbl release]; } return _view; } |
Сначала проверяем вид на пустоту
Далее первым делом создаем наш вью.
_view = [[UIView alloc] initWithFrame:CGRectMake(2, 0, 316, 71)]; |
CGRectMake(2, 0, 316, 71),это стандартные значения для виджета,но 71 можем поменять например на 90,чтобы изменить его высоту.
Затем создаем UIImage для бекграунда:
UIImage *bg = [[UIImage imageWithContentsOfFile:@"/System/Library/WeeAppPlugins/WeeAppTest.bundle/WeeAppBackground.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:71]; |
Создаем UIImageView для отображения нашего бекграунда:
UIImageView *bgView = [[UIImageView alloc] initWithImage:bg];//Бекграунд виджета bgView.frame = CGRectMake(0, 0, 316, 71); |
Прикрепляем bgView к виду нашего виджета:
[_view addSubview:bgView]; [bgView release]; |
Создаем надпись на виджете:
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 316, 71)]; lbl.backgroundColor = [UIColor clearColor]; lbl.textColor = [UIColor whiteColor]; lbl.text = @"iT0ny's Test Widget"; lbl.textAlignment = UITextAlignmentCenter; [_view addSubview:lbl]; [lbl release]; |
Возвращаем наш вид.
Это всего лишь пример реализации,вы можете делать что вашей фантазии угодно.
Интересные опциональные методы:
1)- (float)viewHeight;-отвечает за высоту
Реализация:
- (float)viewHeight{
return 71.0f;
}
2)- (void)willRotateToInterfaceOrientation:(int)arg1;
- (void)willAnimateRotationToInterfaceOrientation:(int)arg1;
- (void)didRotateFromInterfaceOrientation:(int)arg1;
Методы отвечающие за ориентацию виджета в зависимости от ориентации девайса
3)- (id)launchURL;
- (id)launchURLForTapLocation:(struct CGPoint)arg1;
Очень интересные методы,отвечают за переход на URL по тапу на виджет(- (id)launchURL;) и по тапу на область(- (id)launchURLForTapLocation:(struct CGPoint)arg1;)
Реализация 1 метода:
- (NSURL*)launchURL{
return [NSURL URLWithString:@"cydia://"];//тап на виджет перенесет вас в сидию
}
Проверяем наш шаблон.
Запускаем Terminal.app
Вводим
cd template |
Enter
make |
После удачного компилирования,в папке template появится папка obj,в ней будет лежать WeeAppTest.dylib,через свойства файла убираем разрешение .dylib, полученный WeeAppTest копируем в layout/System/Library/WeeAppPlugins/WeeAppTest.bundle
Для тех кто еще не освоился с theos,скомпиленный виджет
После этого по ssh(или как вам удобней) переносим WeeAppTest.bundle на ваш девайс под управлением iOS5 в System/Library/WeeAppPlugins/ .Делаем респринг.Виджет должен появится в центре уведомлений.Пробуем нажать на виджет,нас перенесет в Cydia
Раздел:
Development
Автор:
Антон Титков
12 июня 2011, 15:11
Ответы