Полноэкранные приложения в iPhone

| Комментариев: 9 | Нет трекбэков
Сегодняшняя тема - полноэкранные приложения. За основу взят самый первый HelloWorld. Будем заниматься его модификацией.
Для того, чтобы приложение стало полноэкранным, нужно сделать две вещи: спрятать статус-бар (полоса наверху, где расположены часы, индикаторы батареи, Wi-Fi, EDGE и т.д.) и указать размер фрейма программы следующим образом: 0.0, 0.0, 320.0, 480.0. Этим мы и займёмся.
Обратите внимание на строчки 8-10 и 20 в файле HelloApp.m.

Info.plist
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>Russian</string>
	<key>CFBundleExecutable</key>
	<string>Hello</string>
	<key>CFBundleIdentifier</key>
	<string>com.wehodev.hello</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>0.1</string>
</dict>
</plist>


main.m
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "HelloApp.h"

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int ret = UIApplicationMain(argc, argv, [HelloApp class]);
    [pool release];
    return ret;
}

HelloApp.h
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <CoreGraphics/CGEventTypes.h>
#import <GraphicsServices/GraphicsServices.h>
#import <UIKit/CDStructures.h>
#import <UIKit/UIKit.h>
#import "MainView.h"

@interface HelloApp : UIApplication
{
	UIWindow *mainWindow;
	MainView *mainView;
}
@end

HelloApp.m
#import "HelloApp.h"

@implementation HelloApp

- (void)applicationDidFinishLaunching:(GSEventRef)event;
{
	struct CGRect frame = [UIHardware fullScreenApplicationContentRect];
	frame.origin.x = frame.origin.y = 0.0; // выставляем в координатах левый верхний угол
	frame.size.width = 320.0; // ширина - максимум (320.0)
	frame.size.height = 480.0; // высота - максимум (480.0)
    
	mainWindow = [[UIWindow alloc] initWithContentRect:frame];
	mainView = [[MainView alloc] initWithFrame:frame];
    
	[mainWindow setContentView:mainView];
	[mainWindow orderFront:self];
	[mainWindow makeKey:self];

	// Вот эта самая строка убирает статус-бар (тип - 2, продолжительность скрытия - 0 сек)
	[self setStatusBarMode:2 duration:0.0];
}

- (void)applicationWillTerminate;
{
	[mainView release];
	[mainWindow release];
}

@end

MainView.h
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
#import <CoreGraphics/CGEventTypes.h>
#import <GraphicsServices/GraphicsServices.h>
#import <UIKit/CDStructures.h>
#import <UIKit/UIKit.h>

@interface MainView : UIView
{

}

- (id)initWithFrame:(struct CGRect)frame;

@end

MainView.m
#import "MainView.h"

@implementation MainView

- (id)initWithFrame:(struct CGRect)frame
{
	if ((self = [super initWithFrame:frame]) != nil)
	{
		frame.origin.x = frame.origin.y = 0.0f;

		UITextLabel *text = [[UITextLabel alloc] initWithFrame:frame];
		[text setText:@"Hello, world!"];
		float white[4] = {1.0f, 1.0f, 1.0f, 1.0f};
		float black[4] = {0.0f, 0.0f, 0.0f, 1.0f};
		[text setBackgroundColor:CGColorCreate(CGColorSpaceCreateDeviceRGB(),white)];
		[text setColor:CGColorCreate(CGColorSpaceCreateDeviceRGB(),black)];
		[text setCentersHorizontally:YES];
		[self addSubview:text];
	}
	return self;
}

@end

Лицензия GPLv3
Скачать пример: helloworld_fs.zip

Нет трекбэков

URL для трекбэков: http://weho.ru/cgi-bin/mt/mt-tb.cgi/78

Комментариев: 9

Вопрос про любой хэлловорлд под ифон: при открытие программы в первую секунду на весь экран раскрывается некая иконка, с бумажкой и карандашем. Видимо это стандартная картинка. Как с этим бороться?
Например в инсталлере при первом показе - белый экран с пустым dashboard-ом; затем подгружается основное окно.
Спасибо.

Кладешь в корень своего приложения Default.png и icon.png

Default.png - Показывается при запуске приложения, до тех пор пока полностью не запустится.(если этого файла нету, то показывается стандартная картинка с карандашом и бумажкой)

icon.png - иконка в спрингборде(на рабочем столе).

Клёва, вы рулез!

Чтобы убрать статус бар полностью, нужно установить его высоту в 0:
[ UIHardware _setStatusBarHeight: 0.0 ];
[ self setStatusBarMode:2 duration: 0 ];

Для востанновления:
[ UIHardware _setStatusBarHeight: 20.0 ];
[ self setStatusBarMode:0 duration: 0 ];

[ UIHardware _setStatusBarHeight: 0.0 ];

Делается для обновленяи, если делать разово, то без этого сойдет, если прийдется поворачивать экран и тд, то setStatusBarHeight его обновляет.

Комментировать

Об этой записи

Сообщение опубликовано 01.06.2008 17:43. Автор — Narmo.

Предыдущая запись — Шарик

Следующая запись — Скрипт для облегчения локализации

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.

Работает на Movable Type 5.01
Хороший хостинг