Как сделать приложение для iPhone с боковой прокруткой?
Я работаю над приложением iPhone с боковой прокруткой, и у меня есть все ресурсы, кроме самой части с боковой прокруткой! Как мне сделать приложение так, чтобы оно прокручивалось? Чтобы быть более точным, я хочу, чтобы представление приложения прокручивалось, когда UIImageview (игрок) достигает правой / левой границы экрана.
<: EDIT:>
Мне очень жаль все это замешательство! Все, что я делаю, это ОБРАЗЕЦ приложение для iPhone, которое будет использоваться только в симуляторе. В приложении у меня есть UIImaageview, который перемещается, когда вы касаетесь стрелки UIImageviews. ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ, ЧТО ВСЯ ИНФОРМАЦИЯ УКАЗАНА, ДО НАСТОЯЩЕГО ПРЕДЛОЖЕНИЯ РАБОТАЕТ ОТЛИЧНО! Теперь моя проблема в том, что я хочу, чтобы UIView прокручивал только ОДНУ картинку (это значит, что она не вечна;)). Я пытался использовать UIScrollView, но это не сработало. Наконец, я не планирую использовать Cocos2D или любой другой игровой движок, кроме базового UIview. Это всего лишь тестовое приложение, а не кодирование феерии...
7 ответов
Начните с шаблона приложения на основе представления, чтобы вы могли понять суть того, как это работает. Позже вы можете интегрировать с существующим кодом.
Создайте бесшовное фоновое изображение 320 x 960 пикселей с именем "seamless.png"
Добавьте этот ivar в ваш.h файл контроллера просмотра
UIImageView *bg;
@property (nonatomic, retain) UIImageView *bg;
В вашем файле.m добавьте эти #defines перед строкой @implementation, после @synthesize.
#define kUpdateRate (1.0 / 60.0)
#define kMoveY (3.0)
#define kTopY (0.0)
#define kBottomY (480.0)
@synthesize bg;
Добавьте этот метод.
-(void)scrollView; {
float oldY = self.bg.center.y + kMoveY;
float newY = oldY;
if (oldY > kBottomY) {
newY = kTopY;
}
self.bg.center = CGPointMake(self.bg.center.x, newY);
}
Добавьте это в ваш метод viewDidLoad.
self.bg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"endless.png"]];
[self.view addSubview:self.bg];
self.bg.center = CGPointMake(self.bg.center.x, kTopY);
[NSTimer scheduledTimerWithTimeInterval:kUpdateRate target:self selector:@selector(scrollView) userInfo:nil repeats:YES];
Когда вы запускаете приложение, вы должны иметь хороший фон прокрутки.
Подводя итог, что происходит: Таймер настроен на многократный вызов scrollView:
Там изображение перемещается вниз, пока не достигнет предопределенной точки (kBottomY), после чего его позиция поднимается вверх (kTopY) и начинается снова.
Вы можете настроить его так, чтобы прокручивать его можно только тогда, когда вы этого хотите, или прокручивать его самостоятельно, верно?
Если вы пишете игру, вы можете воспользоваться многими функциями, предоставляемыми такими движками, как Cocos2D.
Если изображение с боковой прокруткой велико, я бы предложил прокрутить вид, используя преимущества CATiledLayer. См. Видео WWDC10 Session 104 и пример кода "Tiling".
Кстати, в документах Apple нет ничего, что могло бы предрешать использование представлений прокрутки для служебных программ или меню.
Вы должны использовать UIScollView ( http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/3393-uiscrollview-tutorial.html). Или я упускаю суть?
Вы пытаетесь использовать UIScrollView? Если это так, просто установите размер содержимого scrollView на что-то более широкое, чем экран. Например:
self.scrollView.contentSize = CGSizeMake(640, 480);
Взгляните на Cocos2D для iPhone, который также включает в себя 2 двигателя столкновения, chipmunk и box2d
Я также могу порекомендовать вам разработку игр для iPhone от компании oreilly book, которая, если вы новичок в разработке игр, научит вас создавать базовые игровые рамки.
Просто сделайте основной вид шире экрана и измените границы соответственно, чтобы показать другую часть основного вида. Это предполагает, что ваш основной вид имеет ограниченную ширину. Это немного хитрее, если этот взгляд навсегда останется. В этом случае вы изменяете границы и рисуете вновь открытое содержание.
Если это не имеет смысла, то я думаю, что вам нужно перефразировать ваш вопрос или поэкспериментировать, чтобы сузить то, что вы спрашиваете.