Сегодняшняя тема - полноэкранные приложения. За основу взят самый первый HelloWorld. Будем заниматься его модификацией.
Для того, чтобы приложение стало полноэкранным, нужно сделать две вещи: спрятать статус-бар (полоса наверху, где расположены часы, индикаторы батареи, Wi-Fi, EDGE и т.д.) и указать размер фрейма программы следующим образом: 0.0, 0.0, 320.0, 480.0. Этим мы и займёмся.
Обратите внимание на строчки 8-10 и 20 в файле HelloApp.m.
Info.plist
main.m
HelloApp.h
HelloApp.m
MainView.h
MainView.m
Лицензия GPLv3
Скачать пример: helloworld_fs.zip
Обратите внимание на строчки 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;
}
@endHelloApp.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];
}
@endMainView.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;
@endMainView.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

Вопрос про любой хэлловорлд под ифон: при открытие программы в первую секунду на весь экран раскрывается некая иконка, с бумажкой и карандашем. Видимо это стандартная картинка. Как с этим бороться?
Например в инсталлере при первом показе - белый экран с пустым dashboard-ом; затем подгружается основное окно.
Спасибо.
Кладешь в корень своего приложения Default.png и icon.png
Default.png - Показывается при запуске приложения, до тех пор пока полностью не запустится.(если этого файла нету, то показывается стандартная картинка с карандашом и бумажкой)
icon.png - иконка в спрингборде(на рабочем столе).
Нужно в Ваш bundle (YourApplication.app) положить свой файл Default.png (320x480). И тогда по умолчанию при запуске программы будет подхватываться именно он. В тех примерах, которые я выкладываю, данный файл присутствует. Там рожа зелёного инопланетянина.
Клёва, вы рулез!
Всегда пожалуйста :-)
Чтобы убрать статус бар полностью, нужно установить его высоту в 0:
[ UIHardware _setStatusBarHeight: 0.0 ];
[ self setStatusBarMode:2 duration: 0 ];
Для востанновления:
[ UIHardware _setStatusBarHeight: 20.0 ];
[ self setStatusBarMode:0 duration: 0 ];
Строчки с UIHardware необязательны. Метод setStatusBarMode:2 принудительно его (статус-бар) убирает. Mode 1 - статус-бар чёрный, как в SpringBoard. Mode 0 - обычный, серый.
[ UIHardware _setStatusBarHeight: 0.0 ];
Делается для обновленяи, если делать разово, то без этого сойдет, если прийдется поворачивать экран и тд, то setStatusBarHeight его обновляет.
Не знал. Спасибо за информацию.