Make gradient on iPhone/iPad

It’s easy! As of iPhone SDK 3.0, custom gradients can be implemented very easily, without subclassing or images, by using the new CAGradientLayer

add framework

1
#import < QuartzCore/QuartzCore.h>

so, example:


Continue reading

Custom change orientation

Solution for change orientation with uitabbar and others exeptions.

1
2
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
          [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didOrientation:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];

And method

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (void) didOrientation: (id)object {
     
     UIInterfaceOrientation interfaceOrientation = [[object object] orientation];

     if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
     
          self.view.transform = CGAffineTransformMakeRotation(0);
     } else if (interfaceOrientation == UIInterfaceOrientationLandscapeRight ){
     
          self.view.transform = CGAffineTransformMakeRotation(M_PI * .5);
     } else {
          self.view.transform = CGAffineTransformMakeRotation(M_PI * -.5);
     }
}

Hide UITabBar of UITabBarController with animation.

Hide UITabBarController/UITabBar with animation.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
BOOL hiddenTabBar;
UITabBarController *tabBarController;

- (void) hideTabBar {
     
     [UIView beginAnimations:nil context:NULL];
     [UIView setAnimationDuration:0.4];
     for(UIView *view in tabBarController.view.subviews)
     {
          CGRect _rect = view.frame;
          if([view isKindOfClass:[UITabBar class]])
          {
               if (hiddenTabBar) {
                    _rect.origin.y = 431;
                    [view setFrame:_rect];
               } else {
                    _rect.origin.y = 480;
                    [view setFrame:_rect];
               }
          } else {
               if (hiddenTabBar) {
                    _rect.size.height = 431;
                    [view setFrame:_rect];
               } else {
                    _rect.size.height = 480;
                    [view setFrame:_rect];
               }
          }
     }   
     [UIView commitAnimations];
     
     hiddenTabBar = !hiddenTabBar;
}

Rewrite UITabBar and UITabBarItem iPhone

Вариант 1

Вкратце о чем нужно помнить!
Самое главное, если вы используете какие-то переменные из приват фреймверков и для них не прописаны property, обязательно пропишите! Иначе при компиляции на эти переменные будет ругаться компилятор к примеру так:

1
2
3
4
"_OBJC_IVAR_$_UITabBarItem._selectedImage", referenced from:
_OBJC_IVAR_$_UITabBarItem._selectedImage$non_lazy_ptr in UICategory.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Рассказывать тут не очем кроме quartz, но о нем я расскажу в следующем посте подробнее, как появится время. Смотрите исходники, кода немного :), основные файлы ExtendsForTabBar.h и m. Исходники ниже.

Вариант 2

Можно взять за основу UITabBar и создать свой объект а не переписывать методы существующего. Хотя в конечном итоге и в этом случае мы переписываем методы.

Добавив два файла пустого NSObject к примеру с именем MyTabBar. В файле h вместо NSObject напишем UITabBar.
В m файе напишем:

1
2
3
4
5
- (void) drawRect:(CGRect)rect {
     self.frame = CGRectMake(0, 409, 320, 71);
     UIImage *img  = [UIImage imageNamed:@"tabbarbg2.png"];
     [img drawInRect:CGRectMake(0, 0, 320, 71)];
}

Далее в MainWindow.xib сделать все как на скриншотах, сохранить и скомпилировать.



Исходники

Чтоб найти еще что-то подобное достаточно набрать: “Custom Colors UITabBar UITabBarItem”, “How to custom UITabBar” и подобное.