Показаны сообщения с ярлыком Objective-C. Показать все сообщения
Показаны сообщения с ярлыком Objective-C. Показать все сообщения

2 февр. 2016 г.

2 янв. 2016 г.

4 авг. 2015 г.

Анимация placeholder`a в Textfield / Textfield placeholder animation (UIFloatLabelTextField)


            In 2013, Matt D. Smith unveiled the Float Label user interface design pattern. In short, it retains a text field's placeholder above said text field as a floating label. This label is brightly colored when the field is active, and dimly colored when a user has finished editing that field.

1. - На storyboard добавляем и кастомизируем на свой вкус UITextField

2. - Добавляем в проект класс UIFloatLabelTextField

3. - Помечаем наши UITextField и в Identity Inspector прописываем им использовать кастомный класс вместо стандартного

4. - Делаем связку наших UITextField с кодом, задаем плейсхолдерам цвет и юзаем в удовольствие.


Download from Github / Загрузить с Github

23 июн. 2015 г.

iOS Games by Tutorials, 1st Edition


Год выпуска: 2013
Автор: Mike Berg, Ray Wenderlich, Tom Bradley
Жанр: Разработка
Издательство: Raywenderlich
Язык: Английский
Формат: PDF
Качество: eBook (изначально компьютерное)
Количество страниц: 831
Описание: Научитесь делать iOS игры!
Узнайте как сделать свои собственные игры для iOS с помощью нового фреймворка - Sprite Kit.
В этой книге, вы познакомитесь примерах мини игр, как воплотить ваши идеи в реальность!
В книге охватывается как базовый так и продвинутый уровень знаний.

(With source code!)

24 мая 2015 г.

UITextField анимация / UITextField animation

Каждому из нас очень часто приходится (например в окне ввода логина / пароля) сдвигать поля ввода чтобы клавиатура не перекрывала их и пользователь видел то что он вводит. Для сдвига с места обычно достаточно простой анимации, но мы как всегда - сделаем это красиво ;)

Представим что у нас на вьюхе есть три UITextField.  Создадим массив и добавим эти UITextField в него. UITextField уже размещены в нужных нам местах. Теперь при тапе на один из них (любой) появится клавиатура которая естественно перекроет UITextField (во многих ситуациях именно так и есть, особенно на iPad при Landscape ориентации устройства. Сдвигаем:

CGAffineTransform textFieldTranslationTransform;
textFieldTranslationTransform = CGAffineTransformMakeTranslation(0, -165);

Важно помнить, что место с которого будет передвигаться UITextField - центр равен 0. Когда элементы станут на новое место, центр каждого элемента станет опять 0. Чтобы опять поставить на место, вместо "-165" ставим "165". Т.е. цифры говорят о том, что мы передвинули не В координату, а НА определенное количество пунктов.

[_textFieldsArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            
            UITextField *tField = (UITextField *)obj;
            
            [UIView animateWithDuration:0.9
                                  delay:0.05 * (double)idx
                 usingSpringWithDamping:0.5
                  initialSpringVelocity:0
                                options:UIViewAnimationOptionCurveLinear
                             animations:^{                     
                                 tField.center = CGPointApplyAffineTransform(tField.center,                                                                           textFieldTranslationTransform);
                             }
                             completion:nil];
        }];

7 мая 2015 г.

UIAlertView с блоком (без делегата) / UIAlertView with block (without delegate) iOS 7

Очень часто не хочется использовать UIAlertView - делегат для идентификации тапнутой пользователем кнопки, особенно если у Вас в контроллере UIAlertView несколько, то приходится присваивать даже tag для UIAlertView. Нашел на просторах UIAlertView с блоком. Очень упростила жизнь. Хотя во многих случаях тоже есть необходимость использовать обычный UIAlertView. Данный Tips&Tricks предназначен в основном для iOS 7, т.к. в iOS 8 уже есть UIAlertViewController (если мне не изменяет память, теперь присутствует тот же блок).

UIBAlertView *timesheetsSubmited = [[UIBAlertView alloc] initWithTitle:@"Title"
message:@"message"
cancelButtonTitle:@"cancel"
otherButtonTitles:@"ok", nil];

[timesheetsSubmited showWithDismissHandler:^(NSInteger selectedIndex,
                                             NSString *selectedTitle,
                                             BOOL didCancel) {
    if (selectedIndex == 1) {
        
        //code
    }
}];

24 апр. 2015 г.

Penn J., Smith J. Build iOS Games with Sprite Kit: Unleash Your Imagination in Two Dimensions

For beginning iOS developers who want to write games and interactive applications.

Take your game ideas from paper to pixels using Sprite Kit, Apple's 2D game development engine. Build two exciting games using Sprite Kit and learn real-world, workshop-tested insights about game design, including cognitive complexity, paper prototyping, and levels of fun.

You'll learn how to implement sophisticated game features such as obstacles and weapons, power-ups and variable difficulty, physics, sound, special effects, and both single- and two-finger control. In no time, you'll be building your own thrilling iOS games.

24 мар. 2015 г.

UIButton popup анимация / UIButton popup animation

Анимация кнопки (UIButton) по клику или без. Также можно анимировать любой другой контрол.








button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.001, 0.001);
    [self.view addSubview:button];
    
    [UIView animateWithDuration:0.4/1.5 animations:^{
        button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.3, 1.3);
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:0.4/2 animations:^{
            button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.8, 0.8);
        } completion:^(BOOL finished) {
            [UIView animateWithDuration:0.4/2 animations:^{
                button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.1, 1.1);
            } completion:^(BOOL finished) {
                [UIView animateWithDuration:0.4/2 animations:^{
                    button.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0);
                } completion:^(BOOL finished) {
                    button.transform = CGAffineTransformIdentity;
                }];
            }];
        }];

    }];

19 мар. 2015 г.

Анимация UITextField, проверка на число / UITextField not number animation

Проверка UITextField на числовой тип (float) и простая анимация если введенные данные не являются таковыми.




// Проверка введенных данных на числовую форму

- (void)textIsValidValue:(NSString *)text textField:(UITextField *)textField {
    
    BOOL result = NO;
    NSScanner *scanner = [NSScanner scannerWithString:text];
    
    if (!(result = [scanner scanFloat:NULL] && [scanner isAtEnd])) {
        
        _isWrongText = YES;
        [self animateTextFieldOnError:textField];
    
    } else { _isWrongText = NO; }

}


// Анимация поля и смена цвета текста если обнаружена ошибка

- (void)animateTextFieldOnError:(UITextField *)textField {
    
    CAKeyframeAnimation * anim = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
    anim.values = @[[NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-10.0f, 0.0f, 0.0f)],
                    [NSValue valueWithCATransform3D:CATransform3DMakeTranslation(10.0f, 0.0f, 0.0f)]];
    anim.autoreverses = YES;
    anim.repeatCount = 2.0f;
    anim.duration = 0.1f;
    
    [textField.layer addAnimation:anim forKey:nil];
    textField.textColor = [UIColor redColor];
}

18 мар. 2015 г.

Beginning iOS Media App Development

Beginning iOS Media App Development is a ground-breaking tutorial that explores the near limitless, programmable audio-visual capabilities of the iPhone, iPad and iPod touch using real-world examples and thorough explanations of the code. This book includes detailed step-by-step instructions and important background information from experienced media and utility app developer, Ahmed Bakir.

You'll learn about content creation, playback, and advanced topics, including AirPlay, AVKit, and Swift introducing. Each chapter is framed with a project that illustrates the concepts being discussed and pulls in lessons from other popular apps. You'll even learn about the latest iOS 8 and Xcode 6 media features.

Publisher: Apress
By: Ahmed Bakir
ISBN: 978-1-4302-5083-8
Year: 2014
Pages: 436
Language: English
File size: 14 MB
File format: PDF

8 мар. 2015 г.

Удаление / замена ненужных символов в строке


Иногда нам нужно избавиться от ненужных символов в строке, так как они могут помешать нам что либо реализовать. Например ответ от сервера с не отформатированным JSON`ом, ключи и значения которого просто разделены запятыми. По запятым мы строку разбить можем, а дальше у нас в подстроках присутствует JSON`овский мусор ( {[ключ:значение] ).
Почистить строку довольно просто (например я использую данную функцию чтобы преобразовать запятую в точку, когда пользователь вводит число с плавающей точкой с русской раскладкой):

// Смена запятой в числе на точку

- (NSString *)replacePriceCountToDotCharacter:(NSString *)string {
    
    NSCharacterSet *charactersToRemove = [NSCharacterSet characterSetWithCharactersInString:@","];
    NSString *trimmedReplacement = [[string componentsSeparatedByCharactersInSet:charactersToRemove]
                                    componentsJoinedByString:@"."];
    
    return trimmedReplacement;

}

Вместо запятой можно прописать любые символы (не разделяя никакими пробелами или запятыми) которые нужно удалить или заменить (вместо точки) на другие. Для простого удаления достаточно убрать точку и оставить строку пустой ( @"" ).

19 февр. 2015 г.

Xcode. Синхронизация ваших сниппетов.

Во время разработки приложений очень часто приходится писать один и тот же код или реализацию какого-нибудь алгоритма (взять тот же банальный rootViewController). Чтобы тратить меньше времени на написание монотомного кода создаю сниппеты.

Через некоторое время стал вопрос (т.к. иногда приходится брать работу на дом, да и не отставать в своих проектах) - КАК синхронизировать свои сниппеты с "домашней" средой разработки и наоборот.

Перелопатив кучу интернет-ресурсов и информации толком так ничего и не нашел. Но вопрос оставался открытым, уже выкинул из головы эту тему, НО, тут на днях по некоторой воли "случайности" наткнулся на зарубежную статью. Решение синхронизации между IDE оказалось довольно простым (все телодвижения проводим в терминале):

$ cd ~/Library/Developer/Xcode/UserData
$ mv CodeSnippets /Dropbox/Xcode/
$ ln -s ~/Dropbox/Xcode/CodeSnippets/ CodeSnippets

Логично использовать, вместо Dropbox, свой любимый облачный сервис.
Главное что стоит помнить - Данные манипуляции проводятся только на одной стороне. На другой стороне нужны только первая и третья строчки, не забыв перед этим удалить папку CodeSnippets, а потом уж создавать симлинк на папку в Dropbox`е.

8 дек. 2014 г.

Кастомные сниппеты кода в Xcode.

Как довольно часто приходится набирать при каждом новом проекте или иногда в каком-то из контроллеров код, который Вы набирали пару дней назад в другом проекте, а ведь время не заставляет себя ждать. Найти старый проект, вытянуть из него нужный код, поменять название класса / переменной и прочих данных тоже занимает время. Можно воспользоваться рефакторингом ИДЕ, что тоже не плохо. А можно сделать себе сниппет и просто менять выделенные подсказки на свои данные. Работает это на подобии когда вы пишете ' if ' или ' init ' и ИДЕ сама подкидывает Вам необходимые символы, запятые, переносы и т.д.

Например возьмем локализацию Вашего приложения, выгладит это примерно так:

NSLocalizedString(@"appName", nil)

Нужно набрать NSLocalizedString потом добавить кавычки, между кавычками прописать название переменной, вместо которой из файла приложение возьмет нужный перевод слова.

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

NSLocalizedString(@"<#localizeVariableName#>", nil)

Как только вы закроете правую скобку после хеш-символа, у Вас слово, которое внутри хеш-символов преобразится в черновой вариант с голубого цвета заливкой:

NSLocalizedString(@"localizeVariableName", nil)

Теперь выделяем наш код и нажимаем кнопку мыши на голубом фоне и не отпуская перетаскиваем вправо в библиотеку сниппетов. Там уже можно отредактировать по какому ключу ИДЕ будет подставлять этот код. Например себе я упростил простым словом ' localize '. И теперь когда я набираю это слово, Xcode автоматически предлагает мне подстановку моего сниппета.


Конвертация кириллицы для API-запросов к сайтам

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

Ниже представлен простой метод который конвертирует кириллицу в понятную для многих серверов кодировку:

- (NSString *)urlEncode:(NSString *)str {
    return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)str, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8));
}

3 июн. 2014 г.

2 июн. 2014 г.