Думаю пора немного рассказать о второй ОС под которую я пишу. Сегодня речь пойдет об iOS.
В сравнение к статье про Android. Анимированный переходы между окнами. хочу рассказать о том как это все делается на iPad / iPhone.
Пожалуй начнем.
Для начала создадим проект, теперь уже в Xcode. Назовем его iPhoneTransition.
Заходим в Xcode ( Create new xcode project -> Empty Application ( жмем next ) -> называем наше приложение ( next ) -> выбираем куда сохранить проект -> Create ). Все, наше приложение создано.
Теперь о написанном в картинках :
Создаем новое приложение:
Созданное приложение выглядит вот так:
Теперь пожалуй начнем создавать наше приложение.
Для начала создадим папки Controllers и Resources. ( можно и не создавать. я делаю для удобства ).
Теперь структура приложения будет выглядеть вот так:
Теперь приступим непосредственно к созданию наших переходов.
Для начала набросаем пару кнопок в MainViewController.xib файл. Для этого нажимаем на наш MainViewController.xib файл он откроется в Interface Builder-e. Перетаскиваем кнопки на панель.
Должно получиться приблизительно вот так:
Теперь повесим на копку обрабоку нажатия. Для этого в верхнем право углу нажимаем кнопку show the assistant editor. Вот как она выглядит на экране:
Получаем экран разделенный на две части справа .h файл слева .xib. для того чтобы подключить нажатие на кнопку к определенному методу нам нужно нажать на кнопке право кнопкой мыши и перетащить в наш .h файл. Вот так как на картинке:
В появившемся окне выбираем Connection : Action, даем название нашему методу ( в моем случае btnTransitionPressed ). Потом нажимаем Connect. Вот как выглядит окошко:
Ну все, в этом примере нам больше ничего подключать не надо будет.
Только ещё установим tag для каждой кнопки которую мы создали, это нам понадобиться позже. Для этого нам необходимо выделить кнопку и нажать Show the attributes inspector. В атрибутах найти поле tag и выставить для каждой кнопки по возрастанию от 0 значения. Вот где это находится:
Вот теперь мы сделали все для того чтобы приступить к написанию наших переходов.
Для начала сделаем так чтобы наш MainViewController запускался при старте приложения и нам отображались наши кнопки для переходов. Для этого нам нужно изменить наш TransitionAppDelegate.h и TransitionAppDelegate.m файлы. Начнем с TransitionAppDelegate.h
Вот так будет выглядеть наш файл после изменений:
TransitionAppDelegate.h
Теперь изменим TransitionAppDelegate.m. Вот так будет выглядеть файл после изменений:
TransitionAppDelegate.m
Теперь запускаем наше приложение и должно появиться наше окно с кнопками.
Далее изменим наши MainViewController.h и MainViewController.m файлы.
MainViewController.h будет выглядеть вот так:
MainViewController.h
Изменим MainViewController.m. Вот так будет выглядеть после изменений наш файл.
MainViewController.m
Теперь приступим к изменениям наших файлов SecondViewController.h и SecondViewController.m которые отвечают за окно в которое мы будем переходить из нашего главного окна.
Изменяем SecondViewController.h вот так:
SecondViewController.h
Теперь изменяем SecondViewController.m. Вот как он будет выглядеть после изменений.
SecondViewController.m
Ну вот и весь код, который нам надо написать для того чтобы посмотреть на 3 типа анимации переходов между окнами для iPhone-приложения.
Надеюсь статья полезна и помогла кому-нибудь сделать в своем приложении анимацию переходов между окнами. :)
Спасибо за внимание и не забывайте кликать like, +1 мне это очень важно.
Принимаются советы и пожелания по поводу будущих и написанных статей.
Результаты в картинках:
В сравнение к статье про Android. Анимированный переходы между окнами. хочу рассказать о том как это все делается на iPad / iPhone.
Пожалуй начнем.
Для начала создадим проект, теперь уже в Xcode. Назовем его iPhoneTransition.
Заходим в Xcode ( Create new xcode project -> Empty Application ( жмем next ) -> называем наше приложение ( next ) -> выбираем куда сохранить проект -> Create ). Все, наше приложение создано.
Теперь о написанном в картинках :
Создаем новое приложение:
Называем приложение:
Созданное приложение выглядит вот так:
Теперь пожалуй начнем создавать наше приложение.
Для начала создадим папки Controllers и Resources. ( можно и не создавать. я делаю для удобства ).
Теперь структура приложения будет выглядеть вот так:
Теперь добавляем контроллер с xib файлом. Для этого нам нужно на папке controllers нажать правой кнопкой мыши и выбрать New File -> Objective-c class. Далее жмем next называем наш класс ( в моём случае MainViewController ). Жмем next, выбираем куда сохранить наш файл и create.
Покажу пару картинок для наглядности.
Выбираем наш Objective-c class.
Называем наш класс.
Проделаем операцию по созданию контроллера ещё раз для SecondViewController ( надо же куда-то переходить с MainViewController ).
Xib-файлы я положил в ранее созданную папку Resources.
После того как сохранили и переместили все файлы как нам нравится ( структура такая как нравится мне ) структура приложения будет выглядеть вот так:Теперь приступим непосредственно к созданию наших переходов.
Для начала набросаем пару кнопок в MainViewController.xib файл. Для этого нажимаем на наш MainViewController.xib файл он откроется в Interface Builder-e. Перетаскиваем кнопки на панель.
Должно получиться приблизительно вот так:
Теперь повесим на копку обрабоку нажатия. Для этого в верхнем право углу нажимаем кнопку show the assistant editor. Вот как она выглядит на экране:
В появившемся окне выбираем Connection : Action, даем название нашему методу ( в моем случае btnTransitionPressed ). Потом нажимаем Connect. Вот как выглядит окошко:
Ну все, в этом примере нам больше ничего подключать не надо будет.
Только ещё установим tag для каждой кнопки которую мы создали, это нам понадобиться позже. Для этого нам необходимо выделить кнопку и нажать Show the attributes inspector. В атрибутах найти поле tag и выставить для каждой кнопки по возрастанию от 0 значения. Вот где это находится:
Вот теперь мы сделали все для того чтобы приступить к написанию наших переходов.
Для начала сделаем так чтобы наш MainViewController запускался при старте приложения и нам отображались наши кнопки для переходов. Для этого нам нужно изменить наш TransitionAppDelegate.h и TransitionAppDelegate.m файлы. Начнем с TransitionAppDelegate.h
Вот так будет выглядеть наш файл после изменений:
TransitionAppDelegate.h
#import
<UIKit/UIKit.h>
@interface
TransitionAppDelegate :
UIResponder
<
UIApplicationDelegate
>
@property
(
strong
,
nonatomic
)
UIWindow
*window;
@property
(
strong
,
nonatomic
)
UINavigationController
*navigationViewController; // Добавляем вот эту строку
@end
Теперь изменим TransitionAppDelegate.m. Вот так будет выглядеть файл после изменений:
TransitionAppDelegate.m
#import
"TransitionAppDelegate.h"
#import
"MainViewController.h"
@implementation
TransitionAppDelegate
@synthesize
window =
_window
;
@synthesize
navigationViewController =
_navigationViewController
; - (
void
)dealloc { [_window
release
]; [_navigationViewController
release
]; [
super
dealloc
]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Устанавливаем MainViewController как основное окно которое будет запускаться при старте приложения UIViewController *rootController = [[MainViewController alloc] init]; _navigationViewController = [[UINavigationController alloc] initWithRootViewController:rootController]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self.window addSubview:_navigationViewController.view]; [rootController release]; [self.window makeKeyAndVisible]; return YES; } - (
void
)applicationWillResignActive:(
UIApplication
*)application {} - (
void
)applicationDidEnterBackground:(
UIApplication
*)application {} - (
void
)applicationWillEnterForeground:(
UIApplication
*)application {} - (
void
)applicationDidBecomeActive:(
UIApplication
*)application {} - (
void
)applicationWillTerminate:(
UIApplication
*)application {}
@end
Теперь запускаем наше приложение и должно появиться наше окно с кнопками.
Далее изменим наши MainViewController.h и MainViewController.m файлы.
MainViewController.h будет выглядеть вот так:
MainViewController.h
#import
<UIKit/UIKit.h>
@interface
MainViewController :
UIViewController
- (
IBAction
)btnTransitionPressed:(
id
)sender;
@end
Изменим MainViewController.m. Вот так будет выглядеть после изменений наш файл.
MainViewController.m
#import
"MainViewController.h"
#import
"SecondViewController.h"
@interface
MainViewController ()
// Создаем несколько private методов для разного типа переходов
- (
void
)slideTransition; - (
void
)flipTransition; - (
void
)curlDownTransition;
@end
@implementation
MainViewController - (
id
)initWithNibName:(
NSString
*)nibNameOrNil bundle:(
NSBundle
*)nibBundleOrNil {
self
= [
super
initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if
(
self
) {
// Custom initialization
}
return self
; } - (
void
)viewDidLoad { [
super
viewDidLoad
]; } - (
void
)viewDidUnload { [
super
viewDidUnload
]; } - (
BOOL
)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } - (void)dealloc { [super dealloc]; } - (IBAction)btnTransitionPressed:(id)sender { // [sender tag] - даст нам tag нажатой кнопки // Смотрим какая кнопка нажата и выбираем тот тип перехода что нам нужно switch ([sender tag]) { case 0: [self slideTransition]; break; case 1: [self flipTransition]; break; case 2: [self curlDownTransition]; break; } } // Написаны непосредственно сами переходы - (void) flipTransition { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1.0]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO]; SecondViewController *temp = [[SecondViewController alloc] initWithTransitionType: @"Flip"]; [self.navigationController pushViewController:temp animated:YES]; [UIView commitAnimations]; [temp release]; } - (void) slideTransition { SecondViewController *temp = [[SecondViewController alloc] initWithTransitionType: @"Slide"]; [self.navigationController pushViewController: temp animated:YES]; [temp release]; } - (void) curlDownTransition { [UIView beginAnimations:nil context:nil]; [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view.window cache:NO]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration:1.0]; [UIView commitAnimations]; SecondViewController *temp = [[SecondViewController alloc] initWithTransitionType: @"Curl"]; [self.navigationController pushViewController:temp animated:YES]; [temp release]; } @end
Теперь приступим к изменениям наших файлов SecondViewController.h и SecondViewController.m которые отвечают за окно в которое мы будем переходить из нашего главного окна.
Изменяем SecondViewController.h вот так:
SecondViewController.h
#import
<UIKit/UIKit.h>
@interface
SecondViewController :
UIViewController
@property
(
strong
,
nonatomic
)
NSString
*transitionType;
// Объявляем новый init метод. Он нам необходим чтобы передавать тип перехода по которому мы пришли в SecondViewController
-(
id
)initWithTransitionType:(
NSString
*)transitionType;
@end
Теперь изменяем SecondViewController.m. Вот как он будет выглядеть после изменений.
SecondViewController.m
#import
"SecondViewController.h"
@interface
SecondViewController ()
// Метод нужен для возврата по анимации в MainViewController
- (
void
)backTransitionType;
@end
@implementation
SecondViewController
@synthesize
transitionType = _transitionType; - (
id
)initWithNibName:(
NSString
*)nibNameOrNil bundle:(
NSBundle
*)nibBundleOrNil {
self
= [
super
initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if
(
self
) {
// Custom initialization
}
return self
; }
// Наш новый init метод
- (
id
) initWithTransitionType:(
NSString
*)transitionType {
if
((
self
= [
super
init
])) {
// Инициализируем transitionType. Устанавливаем тип перехода по которому пришли
self
.transitionType = transitionType; }
return self
; } - (
void
)viewDidLoad { [
super
viewDidLoad
]; } - (
void
)viewDidUnload { [
self
setTransitionType:
nil
]; [
super
viewDidUnload
]; } - (
BOOL
)shouldAutorotateToInterfaceOrientation:(
UIInterfaceOrientation
)interfaceOrientation {
return
(interfaceOrientation == UIInterfaceOrientationPortrait); } - (
void
)dealloc { [_transitionType
release
]; [
super
dealloc
]; }
// В данном примере метод будет отвечать за нажатие по кнопке back в UINavigationController
-(
void
) viewWillDisappear:(
BOOL
)animated { if ([
self
.
navigationController.viewControllers
indexOfObject:
self
] ==
NSNotFound
) { [
self
backTransitionType]; } [
super
viewWillDisappear
:animated]; }
// Здесь создаем наши обратные переходы в MainViewController в зависимости от того каким переходом мы пришли.
- (
void
)backTransitionType {
if
(_transitionType ==
@"Flip"
) { [
UIView
beginAnimations:
nil
context:
nil
]; [
UIView
setAnimationDuration:
1
.0
]; [
UIView
setAnimationCurve:
UIViewAnimationCurveEaseInOut
]; [
UIView
setAnimationTransition:
UIViewAnimationTransitionFlipFromLeft
forView:
self
.
navigationController.view
cache:
NO
]; [
UIView
commitAnimations]; }
else if
(_transitionType ==
@"Curl"
) { [
UIView
beginAnimations:
nil
context:
nil
]; [
UIView
setAnimationTransition:
UIViewAnimationTransitionCurlUp
forView:
self
.
view.window
cache:
NO
]; [
UIView
setAnimationCurve:
UIViewAnimationCurveEaseInOut
]; [
UIView
setAnimationDuration:
1.0
]; [
UIView
commitAnimations]; } }
@end
Ну вот и весь код, который нам надо написать для того чтобы посмотреть на 3 типа анимации переходов между окнами для iPhone-приложения.
Надеюсь статья полезна и помогла кому-нибудь сделать в своем приложении анимацию переходов между окнами. :)
Спасибо за внимание и не забывайте кликать like, +1 мне это очень важно.
Принимаются советы и пожелания по поводу будущих и написанных статей.
Результаты в картинках:
Slide Transition |
Flip Transition |
Curl Transition |
Комментариев нет:
Отправить комментарий