четверг, 14 мая 2009 г.

Иконка приложения

Каждое приложение имеет свою иконку на рабочем столе iPhon-a

Чтобы установить эту картинку, надо в файле info.plist прописать имя картинки для параметра Icon file

Чтобы убрать с иконки уродливую полукруглую тень, надо в  файле info.plist добавить параметр UIPrerenderedIcon типа boolean и установить его значение в YES 

вторник, 12 мая 2009 г.

Всплывающая подсказка в UIWebView

Если задержать палец на гиперссылке в UIWebView, то через пару секунд вылезет окошко с предложением скопировать ссылку или перейти по ней (OS 3.0 и выше). Чтобы запретить это окошко выполняем следующий javaScript

NSString *jsString =@"document.documentElement.style.webkitTouchCallout=\"none\"";
 [webView stringByEvaluatingJavaScriptFromString: jsString];


Выполнять конечно надо после того, как webView закончит загрузку

четверг, 7 мая 2009 г.

Сохранение данных

Если нужно сохранить небольшое количество данных, и прочитать их при следующем запуске приложения, то на помощь приходит класс NSUserDefaults 

Сохранение данных:

NSString* str = @"StringToSave";
NSArray *arr = [[NSArray alloc]initWithObjects: @"array", @"to", @"save",nil];
[[NSUserDefaults standardUserDefaults] setObject: str forKey:@"stringSetting"];
[[NSUserDefaults standardUserDefaults] setObject: arr forKey:@"this_is_array"];
[[NSUserDefaults standardUserDefaults] synchronize];

Чтение данных:

NSString* str = [[NSUserDefaults standardUserDefaults] objectForKey:@"stringSetting"];
 NSArray *a = [[NSUserDefaults standardUserDefaults] objectForKey:@"this_is_array"];

Сохранять данные лучше всего при выходе из приложения - в методе - (void)applicationWillTerminate:(UIApplication *)application вашего делегата UIApplicationDelegate


среда, 6 мая 2009 г.

Полезные мелочи. Как создать анимированую картинку

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

Добавляем эти файлы в проект и делаем из них анимированое изображение:

NSArray *imagesList = [NSArray arrayWithObjects:
 [UIImage imageNamed:@"image1.png"],
 [UIImage imageNamed:@"image2.png"],
 [UIImage imageNamed:@"image3.png"],
 [UIImage imageNamed:@"image4.gif"],
 nil];
UIImageView *animatedView = [[UIImageView alloc]initWithFrame: [self frame]];
animatedView.animationImages = imagesList;
animatedView.animationDuration = 0.25; // seconds
animatedView.animationRepeatCount = 0; // 0 =  forever
[animatedView startAnimating];
[self addSubview:animatedView];
[animatedView release];  

вторник, 5 мая 2009 г.

Скроллинг в UIWebView

Если нужно получить текущее положение скролла в UIWebView, либо устоновить скролл в заданную позицию, то есть 2 пути - Использовать java script или недокументированые методы. Как правило использование законных путей лучше. Поэтому о них и поговорим

Получить текущее положение скролла (вертикальное)

int scrollPosition = [[webView stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"] intValue];

Установить вертикальное положение скролла

int yOffset = 123;
NSString *jsString = [NSString stringWithFormat: @"window.scrollTo(0, %d) ", yOffset];
[_webView stringByEvaluatingJavaScriptFromString: jsString];  



Меняем размер шрифта в UIWebView

Для того, чтобы во время работы уменьшить/увеличить размер шрифта в UIWebView, воспользуемся архиполезной возможностью этого элемента, выполнять java script

 int fontScale = 150;
 NSString *jsString = [NSString stringWithFormat: @"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'",  fontScale];
  [_webView stringByEvaluatingJavaScriptFromString: jsString];

 

Конечно делать это нужно только после того, как UIWebView  закончит загрузку своего содержимого


 

Ссылки в UIWebView

Иногда надо контролировать клики пользователя по гиперссылкам в UIWebView для этого необходимо назначить для webView делегата и переопределить в нем метод - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType

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

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType

     if(navigationType == UIWebViewNavigationTypeLinkClicked)
     {
        NSString *fullLink = request.URL.path;
        if([fullLink hasSuffix:@".com"])
            {return NO;}
     } 
 return YES;
}
 


Картинки в UIWebView

Иногда нужно создать свой форматированый HTML текст и вывести его на экран. Для этого используется элемент UIWebView Если же в этом  тексте должны быть картинки, то

1. Добавляем файлы с картинками в проект

2. В HTML пишем просто  

3. В коде пишем 

NSString *htmlString = @"Html with image ";
NSString *path = [[NSBundle mainBundle] bundlePath];
NSURL *baseURL = [NSURL fileURLWithPath: path];
[webView loadHTMLString: htmlString baseURL: baseURL];



Полезные мелочи. Запуск приложения в Landscape mode

Если Вам нужно, чтобы Ваше приложение запускалось сразу в landscape mode (горизонтально), то Вам необходимо в info.plist добавить ключ UIInterfaceOrientation  и установить его значение равным UIInterfaceOrientationLandscapeRight

понедельник, 4 мая 2009 г.

Полезные мелочи. Как сделать скриншот в iPhone

Этот код делает "фотографию экрана и помещает ее в галлерею iPhone

CGRect rect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(rect.size);
[currentViewController.view.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);