воскресенье, 14 июля 2013 г.

Objective-C: NSViewController - простой пример управления слоями или видами (views)

Xcode: Version 4.6.3

Для начала создадим новый проект в xcode, с названием Example. Сразу добавим в него два класса  NSViewController (File - New - File → Objective-C class) с именами:
FirstViewController и SecondViewController каждый с собственными xib-ами, галочка «With XIB for user interfasce» соответственно должна быть поставлена.


В SecondViewController.xib и FirstViewController.xib на  слой (Custom View) добавляем кнопку и текстовое поле, для визуализации. Должно получиться конструкция показанная на скриншоте ниже. В MainMenu.xib две кнопки и новый слой 0, а уже на него текстовое поле.

 

В MainMenu.xib из правой колонки перетащим два контролера типа «ViewController».


Созданные контролеры привяжем к конкретным классам:


После подготовительной работы опишем наши будущие действия. Так по кнопке 1 показываем слой 1 *(скрывая слой 2), по кнопке 2 показываем слой 2 *(скрывая при этом слой 1).

AppDelegate.h

#import <Cocoa/Cocoa.h>
@class FirstViewController;
@class SecondViewController;


@interface AppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;
@property (weak) IBOutlet NSView *view0;
@property (unsafe_unretained) IBOutlet FirstViewController *firstViewController;
@property (unsafe_unretained) IBOutlet SecondViewController *secondViewController;

- (IBAction)button1:(id)sender;
- (IBAction)button2:(id)sender;

@end

AppDelegate.m

#import "AppDelegate.h"
#import "FirstViewController.h"
#import "SecondViewController.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}

- (IBAction)button1:(id)sender {
   
    NSLog(@"Кнопка 1 нажата");   
    [[_secondViewController view]removeFromSuperview];
    [_view0 addSubview:[_firstViewController view]];
    [[_firstViewController view] setFrame:[_view0 bounds]];

}

- (IBAction)button2:(id)sender {
   
    NSLog(@"Кнопка 2 нажата");
    [[_firstViewController view]removeFromSuperview];
    [_view0 addSubview:[_secondViewController view]];
    [[_secondViewController view] setFrame:[_view0 bounds]];

}

@end

Усложним задачу по клику кнопки слоя First скрыть слой First и показать слой Second, а по клику кнопки слоя Second скрыть слой Second и показать слой First. По сути зеркальные действия.

FirstViewController.h

#import <Cocoa/Cocoa.h>
@class SecondViewController;

@interface FirstViewController : NSViewController
@property (weak) IBOutlet NSView *view0;
@property (strong) IBOutlet NSView *firstView;
@property (unsafe_unretained) IBOutlet SecondViewController *secondViewController;

- (IBAction)buttonFirst:(id)sender;

@end

FirstViewController.m

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController ()

@end

@implementation FirstViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Initialization code here.
    }
   
    return self;
}

- (IBAction)buttonFirst:(id)sender {
   
    NSLog(@"Кнопка buttonFirst нажата");
    [_firstView removeFromSuperview];
    [[_secondViewController view] removeFromSuperview];
    [_view0 addSubview:[_secondViewController view]];
    [[_secondViewController view] setFrame:[_view0 bounds]];
   
}

@end

SecondViewController.h

#import <Cocoa/Cocoa.h>
@class FirstViewController;

@interface SecondViewController : NSViewController

@property (weak) IBOutlet NSView *view0;
@property (strong) IBOutlet NSView *secondView;
@property (unsafe_unretained) IBOutlet FirstViewController *firstViewController;


- (IBAction)buttonSecond:(id)sender;

@end

SecondViewController.m

#import "SecondViewController.h"
#import "FirstViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Initialization code here.
    }
   
    return self;
}

- (IBAction)buttonSecond:(id)sender {
   
    NSLog(@"Кнопка buttonSecond нажата");
    [_secondView removeFromSuperview];
    [[_firstViewController view] removeFromSuperview];
    [_view0 addSubview:[_firstViewController view]];
    [[_firstViewController view] setFrame:[_view0 bounds]];}

@end

понедельник, 24 июня 2013 г.

Objective-C: Генерация случайного числа

Xcode: Version 4.6.3

Допустим нам надо получить случайное число в каком-то диапазоне положительных чисел, к примеру любое случайное число от 0 до 1, воспользуемся решением ниже:

// Метод генерации случайных чисел от начального положительного значения до конечного положительного значения
// Начальное положительного значение и конечное положительное значение входят в этот диапазон
- (NSUInteger) generate: (unsigned long) initialValue generate: (unsigned long) finalValue {
  
    // Возвращаем генерированное число
    return initialValue + (arc4random() % finalValue);
  

Проверка:

int a = 0, b = 1;

long v = [self generate:a generate: (b - a) + 1];

NSLog(@"Случайное число от %d до %d = %lu", a, b, v);

Objective-C: Женская русская фамилия из мужской

Xcode: Version 4.6.3 

Преобразование женской фамилии из мужской, подразумевает замену окончаний в слове. То есть действуют простые правила, если мужская фамилия заканчивается на -ов, -ев, -ин, -ёв то в конце добавляется -а. Если окончание на -ий, -ый, -ой добавляется -ая. Все остальные фамилии остаются как есть.

Набросаем метод:

// Метод преобразования русской женской фамилии из мужской русской фамилии
// От мужских русских фамилий на -ов, -ев, -ин, -ёв добавляется -а
// От мужских русских фамилий на -ий, -ый, -ой добавляется -ая
// Остальные остаются как есть
- (NSString*) conversionHumanWomanFamilyRu: (NSString*) humanManFamilyRu {
   
    // Забираем от строки(мужской фамилии) два последних символа
  NSString *endTwoCharactersHumanManFamilyRu = [humanManFamilyRu substringFromIndex:([humanManFamilyRu length] - 2)];
   
    //NSLog(@"String:%@, two last character of the string:%@, string length:%lu", humanManFamilyRu, endTwoCharactersHumanManFamilyRu, ([humanManFamilyRu length] - 2));
   
    // Сравниваем окончание
    if ( [endTwoCharactersHumanManFamilyRu isEqual: @"ов"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ев"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ёв"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ин"]) {
          
        humanManFamilyRu = [humanManFamilyRu stringByAppendingString:@"а"];
       
        // NSLog(@"%@",humanManFamilyRu);
       
    } else {
       
        if ([endTwoCharactersHumanManFamilyRu isEqual: @"ий"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ый"] || [endTwoCharactersHumanManFamilyRu isEqual: @"ой"]) {
           
            humanManFamilyRu = [humanManFamilyRu stringByReplacingCharactersInRange: NSMakeRange(([humanManFamilyRu length]-2),2) withString:@"ая" ];
           
            // NSLog(@"%@",humanManFamilyRu);
           
        }
       
    }    
    // Возвращаем женскую фамилию
    return humanManFamilyRu;
}

И наконец производим правильность работы метода:

NSString *humanWomanFamilyRu =[self conversionHumanWomanFamilyRu:@"Ангарский"];

NSLog(@"Русская женская фамилия:%@", humanWomanFamilyRu);

пятница, 7 декабря 2012 г.

Наложницы

Автор: Ricky Java
Язык: русский
Кол-во: 5шт
Разрешение: 1000 × 1000
Скачать: Наложницы.zip

История: Каждое утро, согласно заведенному распорядку, наложницы имперского гарема Лотарингии, ожидая прихода принца, устраивали на балконе смотрины. Бесстыже, козыряя своими аппетитными формами, каждая из одалисок в тайне надеялась, что именно ее, сегодня выберут для монарших утех.
актрисаСержена: У Сержены красивый голос и природный дар к музыке. Она искусная флейтистка, ее конек - неистовая и завораживающая игра на двух флейтах разом. К тому же, она очень любит животных, самые свирепые волкодавы из королевской псарни слушаются ее беспрекословно, а королевский жеребец по кличке Тайфун от нее без ума. До поступления на службу к принцу, слыла известной киноактрисой и востребованной моделью глянцевых журналов.
фанаткаРимма: Римма - первая, по размерам, в гареме. Ей восемнадцать лет, она самая молоденькая и амбициозная из рабынь, прекрасно сложена и эрудированна, и ко всему прочему, зажигательно, исполняет восточные танцы. Очень гибкая, принять любую позу, для нее не составляет большого труда. Решив доказать всем, что она больше, чем просто еще одна кукла со смазливым личиком, старается обслужить принца и его гостей, по высшему классу. Для нее нет табу в постели. В гарем, ее, студентку-первокурсницу педагогического, привело страстное влечение к VIP-Персонам и мировым знаменитостям. Теперь, знакомство с сильными мира сего, не только, ее обожаемое хобби, но и любимая работа, одновременно.
путешественница Урсула: Урсула попала в имперский дворец, еще подростком, но быстро освоилась, и вскоре, благодаря своей природной красоте, двум преогромным женским прелестям, кроткому норову и безотказности, стала одной из лучших и любимых наложниц принца. Очень выносливая и неприхотливая в быту, плюс замечательно варит кофе с молоком, на завтрак. Коммуникабельная, обожает быть в центре внимания, любой, пусть даже сугубо мужской компании. В юности, любила путешествовать автостопом, поэтому, знает много языков, обычаев и правил гостеприимства, неукоснительно соблюдаемых в отношении странствующих, в одиночку, молоденьких девушек. Принц, частенько берет ее с собой на всяческие рауты и длительные поездки, в качестве секретаря по связям с общественностью. Незаменима, в решении проблемы оставляемого залога или оплаты долгов принца в зарубежных вояжах.

четверг, 6 декабря 2012 г.

Сорайя - ненасытная воительница

Сорайя
Автор: Ricky Java
Язык: русский
Кол-во: 5шт
Разрешение: 1000 × 1000
Скачать: Сорайя - ненасытная воительница.zip

История: Сорайя, мысленно перенесясь в далекое прошлое, бродила по заброшенным руинам древнего замка. Обследовав, как следует, местность, она вдруг обнаружила останки древнего трона, сложенного из грубо обработанного камня. Кому он принадлежал? Вопрошает она. Кто, на нем восседал, великий лорд-консорт или же его супруга, воинствующая королева?

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

«Королева варваров не носит длинные вычурные рукава, развивающиеся на ветру,  как паруса кораблей» - размышляла Сорайя. Она обнажает свои сильные и ловкие руки в случае войны, лихо управляясь мечом и щитом для защиты, и носит на руках драгоценности инкрустированные золотом, только в мирное время, после того, как полностью изничтожит всех своих заклятых врагов и заносчивых выскочек, конкуренток на престол.

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

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

Развалившись на прохладной, каменной скамье, Сорайя, вновь представила себе, античных Королев-победительниц, их былую воинскую доблесть и славу, теперь, увы, утраченную навсегда. Эти отважные женщины-воины не носили кружевные лифы, шляпки или шарфики, им и мужчины были не указ, они приказывали, а не подчинялись тупым и грубым мужланам. Сорайя, тяжело вздохнула. «Но, куда ей, до них?». Себя не обманешь. Ей, нипочем не, заставить себя, расстаться со всей этой гламурной мишурой, ведь в шелковой парче, она так великолепно смотрится. Увы и Ах. К своему стыду, она осознает, что ей суждено стать языческой королевой, лишь в своих девичьих мечтах.

вторник, 4 декабря 2012 г.

Франческа

модница
Автор: Ricky Java
Язык: русский
Кол-во: 5шт
Разрешение: 1000 × 1000
Скачать: Франческа.zip

История: Знакомьтесь, Франческа - умелая белошвейка и завзятая модница, обожает шить и   наряжаться. Недалеко, от родного поместья в Равенне, прогуливается, в платье собственного изготовления, из недавней, летней коллекции. «Искусительница» - так, назвала она свое новое творение.
Выпускница

А это платьице, Франческа нарекла «Скромница». Она немного в замешательстве, какой же из них, ей надеть, на выпускной. «Там, будут гардемарины из королевской академии, у них кстати, тоже выпуск». Наморщив прелестный лобик, красотка на секунду задумалась, -  «Хм... В чем же, пойти?». «Эврика!!» - захлопав в лодоши, воскликнула девушка - «Ну, конечно, как я сразу об этом, не подумала?»

Чуточку креатива, и вуаля, новый наряд готов. Пусть, капельку вызывающее, но зато великолепно смотрится на ней, подчеркивая ее несомненные достоинства, как будущей офицерской жены. «Уже, лучше, девчонки лопнут от зависти. Я назову его «Охотница» - игриво, улыбаясь, прощебетала юная модница.

Позируя, словно на подиуме, в своем любимом наряде «Амазонка», Франческа здраво рассудила, что в таком облачении, понравится парням больше, и наверняка, затмит своих сокурсниц. Теперь, нужно просто выбрать, в каком из трех, отправиться на выпускной бал.

Чуточку, поразмыслив, Франческа определилась с выбором наряда и готова зажигать на балу. Предпочтя, смелый костюм «Амазонки», но со скромными и элегантными, кружевными нарукавниками от «Искусительницы», наша разумная героиня, без сомнения, станет королевой бала...

среда, 7 ноября 2012 г.

Кинодива

богиня
Автор: Ricky Java
Язык: русский
Кол-во: 5шт
Разрешение: 1000 × 1000
Скачать: Кинодива.zip

История: Сегодня, по пути на работу, я повстречал потрясающую женщину. Ну просто богиня, с ВОТ такими достоинствами. Набравшись смелости, я решил во чтобы то ни стало познакомиться с такой красоткой. Поравнявшись с ней, я заговорил - «Извините ради бога, не подскажите, где тут гостиница»

Мило улыбнувшись, в ответ, она сняла свои солнцезащитные очечки, и я понял, что попал в рай. Голубоглазый ангелочек с белокурыми волосами затараторил приятным голоском - «Мотель? Вниз, по улице, вон в ту арку» «Туда?» - уточнил я. «Да, да это там» , - утвердительно кивнул ангелочек, указывая пальчиком на группу строений в конце улицы.

«Ради бога, еще раз извините, я впервые в вашем городке, киногруппа уже прибыла, а я знаете ли задержался и никак не отыщу место где они остановились» - собираясь уходить, произнес я.

«Так вы - кинорежиссер!» - воскликнула девица.

«Помощник продюсера, если быть точным. Знаете, скоро запускаем новый проект, вот ищем подходящую натуру для съемок. А ваш городок, кажется, идеально подходит для нового фильма» - сделав задумчивую мину, я спросил блондинку - «Скажите, мы раньше не встречались? Где, я мог, вас видеть, вы актриса?»

«О, Нет!» - плаксиво сообщила моя собеседница, но потом просияв добавила- «Но, я обожаю кино, особенно про любовь. Не пропускаю, ни одной премьеры!»

«А что за фильм, вы снимаете?» - спросила девушка.

«Кино драму в двух сериях, о нераздельной любви, одной сельской девушки к своему красивому молодому господину. Сюжет просто шикарен, я прочитал сценарий за сутки, просто не мог оторваться. Представьте, дикий запад, ловелас-искуситель, красавец, да к тому же богатый, как Крез, хитростью и лестью добивающийся любви белокурой селянки, девушки неземной красоты. Заманив в свои силки несчастную пташку и получив желаемое, мачо-подлец подло бросает ее, что бы женится, отчасти под нажимом своих родителей, на некрасивой, но знатной особе. Чудно, не правда ли?»

«ООох, потрясающее!! Гениально!!» - молодая особа радовалась как дитя.

«Но вот незадача, на главную роль нет подходящей кандидатуры. Не знаем что и делать. Сделали кучу кинопроб с разными актрисами, все не то. Нет нужного типажа. Ту, которая действительно органично впишется в эту роль»  - грустно вздохнув, подытожил я.

«Что, разве ни одна не подошла?» - девушка, как будто бы расстроилась.

«Увы! По сюжету, главная героиня - селянка, соответственно актриса и должна походить на сельскую девушку. Формами, говором и манерами. Ну скажем, говорить как сельчане и вести себя как они, это актриса, без труда, сыграет, а вот как быть с формами. Героиня знаете ли на ферме трудиться, дояркой. А сегодняшние актрисы, все поголовно сидят на диетах, ну сами понимаете, как она будет, нелепо выглядеть, на экране, в роли дородной деревенской девушки»

«А.. Ээ.. Почему бы, вам не поискать среди местных девушек. У нас много красивых девушек и именно таких - каких вам нужно» - подумав, предложила девушка.

«Кто, они? Где их найти?» - умоляющее сложив руки, вопрошал я.

«К примеру, я.. Меня. Может я подойду» - выпалила девица, при этом густо покраснев.

«Вы?!!» - удивился я, пристально и оценивающее посмотрев на свою собеседницу, как будто только сейчас разглядев в ней что-то подходящее.  «Хм... А это идея, может сработать. Я не хочу, заранее обнадеживать вас.. Ну, а вдруг...» «Ура! Ура!» - девица, радуясь, захлопала в ладоши. «Подождите... Перво-наперво, мне нужно взглянуть на ваше портфолио»

«Пор.. Портфолио?» - озадаченно произнесла девица.

«Да, портфолио. Фото, резюме и так далее. Чтобы я мог показать продюсеру картины»

«У.. У меня, нет порт.. Портволия.. » - чуть не плача, произнесла девушка.

«Ну-ну, не расстраивайтесь, так!» - пытаясь утешать девушку я потрепал ту по плечу, - «Эврика!! Думаю, я знаю что делать! Вот, смотрите» - вынув из кармана смартфон, я показал его ей - «У меня телефон с камерой, я сниму вас и покажу эту запись продюсеру, а в качестве резюме вы наговорите на диктофон вашу биографию. Идет?»

«О, Класс!! Суперски!!» - воскликнула растроганная моим благородным порывом блондинка.

«Ну, что ж приступим!» - направив телефон на барышню и включив камеру, - «Внимание, камера, мотор!!»