Еще одна статья от Алекса Краковецкого о разработке для iPhone.

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

Logging

Для того, чтобы увидеть логи, необходимо выбрать Run > Console в Xcode .

NSLog(@"log: %@ ", myString); // для переменных типа NSString
NSLog(@"log: %f ", myFloat); // для переменных типа float
NSLog(@"log: %i ", myInt); // для переменных типа int

Добавление изображения

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 109.0f);
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
[myImage setImage:[UIImage imageNamed:@"myImage.png"]];
myImage.opaque = YES;
[self.view addSubview:myImage];
[myImage release];

Добавление UIWebView

CGRect webFrame = CGRectMake(0.0, 0.0, 320.0, 460.0);
UIWebView *webView = [[UIWebView alloc] initWithFrame:webFrame];
[webView setBackgroundColor:[UIColor whiteColor]];
NSString *urlAddress = @"<a href="http://www.google.com/">http://www.google.com</a>";
NSURL *url = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj]; [self addSubview:webView];
[webView release];

Отображение статуса Network Activity

IApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES; // для остановки уставите значение в NO

Конвертация NSInteger в NSString

currentScoreLabel.text = [NSString stringWithFormat:@"%d", currentScore];

Подвижные (draggable) элементы

  1. Создаем новый класс который наследуется от UIImageView
    @interface myDraggableImage : UIImageView { }
  2. В реализации этого класса добавляем два метода:
    - (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 	 	
        // Retrieve the touch point
        CGPoint pt = [[touches anyObject] locationInView:self];
        startLocation = pt;
        [[self superview] bringSubviewToFront:self];
    }
    - (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { 	 	
        // Move relative to the original touch point
        CGPoint pt = [[touches anyObject] locationInView:self];
        CGRect frame = [self frame];
        frame.origin.x += pt.x - startLocation.x;
        frame.origin.y += pt.y - startLocation.y;
        [self setFrame:frame];
    }
    
  3. Создайте изображение (или то, что вам необходимо) и добавьте ее к вашему view:
    dragger = [[myDraggableImage alloc] initWithFrame:myDragRect];
    [dragger setImage:[UIImage imageNamed:@"myImage.png"]];
    [dragger setUserInteractionEnabled:YES];
    

Потоки (Threading)

  1. Создайте новый поток:
    [NSThread detachNewThreadSelector:@selector(<strong>myMethod</strong>)  toTarget:self withObject:nil];
    
  2. Создайте новый метод, который указан в потоке:
    - (void)<strong>myMethod</strong> {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        // *** code that should be run in the new thread goes here ***
        [pool release];
    }
    

Таймеры

Таймер, который будет запускаться раз в секунду:

[NSTimer scheduledTimerWithTimeInterval:1  	target:self selector:@selector(<strong>myMethod</strong>)  	userInfo:nil  	repeats:YES];

Если нужно передать какой то параметр в вашу функцию, необходимо использовать следующий код:

[NSTimer scheduledTimerWithTimeInterval:1  	target:self selector:@selector(<strong>myMethod</strong>)  	userInfo: myObject repeats:YES];

Далее создаете функцию, которая будет запускаться по таймеру:

-(void)myMethod:(NSTimer*)timer {
    // Now I can access all the properties and methods of myObject
    [[timer userInfo] myObjectMethod];
}

Останавливаем таймер:

[myTimer invalidate];
myTimer = nil; // ensures we never invalidate an already invalid Timer

Время

CFAbsoluteTime myCurrentTime = CFAbsoluteTimeGetCurrent();
// perform calculations here

Уведомления (Alerts)

Простейшое уведомление с кнопкой ОК:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"An Alert!"  		delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];

Определение Subview

Для этого небходимо использовать tag для views:

for (UIImageView *anImage in [self.view subviews]) {
    if (anImage.tag == 1)  {
        // do something
    }
}

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

Д.

Доступна Trial-версия MonoTouch – .NET для iPhone

Стала доступна trial-версия MonoTouch – средств разработки .NET приложений для iPhone. Загрузить MonoTouch Trial можно здесь. Как уже говорилось ранее, лицензия на этот инструментарий стоит $399 но с помощью trial-версии можно хотя бы оценить, на сколько оправданными могут быть подобные затраты. Пробная версия позволяет запускать приложения только в эмуляторе, но и этого должно быть достаточно для начала.

И.

Игнорирование со стороны Apple может стоить разработчикам приложения под iPhone $600000

AppStore ApprovalСегодня на Хабре появился довольно интересный пост о том, что одна из компаний-разработчиков ПО для iPhone уже пол-года ждет ответа от Apple на запрос о добавлении их приложения в AppStore. Из-за задержки с ответом компания может потерять около $600000, потраченные на разработку и продвижение продукта. Это, понятное дело, очень печально.

Вопрос касается программного продукта Newber. Приложение Newber позволяет переключать звонок между iPhone  и стационарным телефоном, т.е. например, ответив на звонок по пути домой с помощью iPhone, по приходу можно продолжить разговор уже по стационарному телефону.

По поводу задержек с ответом от Apple всем сочуствующим предлагается подписать петицию в поддержку разработчиков.

Узнать больше по этому вопросу можно из оригинальной статьи.