Ошибка при обновлении cocoaPods

30 января был найден баг в libgit2 и у всех конфигурация подов сломалась.
При попытке выполнить pod update появлялась ошибка про merge conflict.

 

Решение:

$ pod repo remove master
$ pod setup

подробнее об ошибке можно почитать на офиц блоге.

Навигация в сториборд

Бывает в сторибордах очень тяжело попасть или выбрать UIView, в котором какой-либо элемент растянут на всю ширинувысоту. На выручку приходит Tab. При нажатии фокус перейдет на след элемент в иерархии и так по кругу.

Сохраняем скриншот в Camera Roll

Задача: сохранить внутренности UIScrollView как скриншот в памяти телефона.

Добавляем категорию для UIImage (Github.com – ZHAdditions).

В методе, который вызывается по нажатию кнопки вставляем:

 UIImage * screenshot = [self imageFromView: self.scrollview];  
   
 // сохраняем изначальный scrollview.frame и растягиваем scrollview по высотеширине contentSize  
 self.originalScrollviewFrame = self.scrollview.frame;  
 CGRect newFrame = self.scrollview.frame;  
 newFrame.size = self.scrollview.contentSize;  
 self.scrollview.frame = newFrame;  
 
 if (screenshot)  
     UIImageWriteToSavedPhotosAlbum(screenshot, self, @selector(thisImage:hasBeenSavedInPhotoAlbumWithError:usingContextInfo:), nil);  

В контроллере где вызывается метод кнопки вставляем чуть ниже:

 - (void)thisImage:(UIImage *)image hasBeenSavedInPhotoAlbumWithError:(NSError *)error usingContextInfo:(void*)ctxInfo {
    // меняем обратно размер scrollview
    self.scrollview.frame = self.originalScrollviewFrame;

    if (error) {
        ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];  
        if (status != ALAuthorizationStatusAuthorized)  
            // Приложению нужен доступ к фотопленке. Перейдите в настройки приватности.  
        else  
            // Произошла неизвестная ошибка, не удалось сохранить скриншот.  
    } else  
        // Готово! Скриншот сохранен.  
 }  

Подводный камень тут в том, чтобы поменять scrollview.frame перед тем как делать скриншот, иначе скриншот будет только из видимой области scrollview.

Добавляем Parallax эффект в iOS 7

Это оказалось настолько просто, что даже смешно:)

UIInterpolatingMotionEffect *xAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x" type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis];
    xAxis.minimumRelativeValue = [NSNumber numberWithFloat:10.0];
    xAxis.maximumRelativeValue = [NSNumber numberWithFloat:-10.0];
UIInterpolatingMotionEffect *yAxis = [[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y" type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis];
    yAxis.minimumRelativeValue = [NSNumber numberWithFloat:10.0];
    yAxis.maximumRelativeValue = [NSNumber numberWithFloat:-10.0];
UIMotionEffectGroup *group = [[UIMotionEffectGroup alloc] init];
    group.motionEffects = @[xAxis, yAxis];
    
[obj addMotionEffect:group];

добавляем группу на нужные объекты и все.

Для большего эффекта можно добавить обратные значения и прикрепить новую группу к заднему фону. В таком случае, объекты на переднем плане будут двигаться в противоположную сторону от фона.

Swipe back без uinavigationbar

 Если нужно поддерживать жест смахивания от левого края (swipe from left edge to go back), но uinavigationbar скрыт, то включается функционал следующим трюком:

    if ([navController respondsToSelector:@selector(interactivePopGestureRecognizer)])
    {
        navController.interactivePopGestureRecognizer.enabled = YES;
        navController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
    }