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
    }
}];

5 мая 2015 г.

UINavigationBar анимация сокрытия-показа / UINavigationBar hide-show animation

Иногда необходимо немного больше места на экране для отображения более детального и большего количества информации. Обычно при этом прячут UINavigationBar. Почему бы это не сделать при помощи анимации:





- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.navigationController.navigationBar lt_reset];
}

#pragma mark - UINavigationBar hide/show animation methods

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat offsetY = scrollView.contentOffset.y;
    if (offsetY > 0) {
        if (offsetY >= 44) {
            [self setNavigationBarTransformProgress:1];
        } else {
            [self setNavigationBarTransformProgress:(offsetY / 44)];
        }
    } else {
        [self setNavigationBarTransformProgress:0];
        self.navigationController.navigationBar.backIndicatorImage = [UIImage new];
    }
}

- (void)setNavigationBarTransformProgress:(CGFloat)progress
{
    [self.navigationController.navigationBar lt_setTranslationY:(-44 * progress)];
    [self.navigationController.navigationBar lt_setContentAlpha:(1-progress)];
}

3 мая 2015 г.

Оптимизация производительности приложений для iOS

Книга демонстрирует, как совершенствовать, увеличивать и оптимизировать производительность приложений для операционной системы iOS. Вы быстро научитесь создавать быстрые и отзывчивые приложения, пригодные для распространения на коммерческой основе. Эта книга охватывает множество общих и вместе с тем сложных проблем, возникающих при оптимизации производительности приложений для iPhone и iPad, и подробно описывает, как эффективно их решать. Она содержит массу практических знаний, приемов, советов и рекомендаций, которые помогут вам преуспеть в конкурентном мире разработки приложений для iOS.

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