2013-05-19 4 views
1

У меня есть меню, как uiimage. Я хочу, чтобы 5 меню на этой панели меню можно было щелкнуть и связать с другим видом. Может ли кто-нибудь сказать мне, как я могу это сделать? Я нашел людей, использующих uibutton для uiimage, это прекрасно для меня и как я могу отделить панель меню до 5 штук.Как я могу сделать интерактивный uiimage?

Спасибо за обоих rmaddy и Brent Royal-Gordon

я решил использовать UIImage в качестве Menubar фона и добавьте UIButton на него. Я пробую что-то вроде этого:

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
            pathForResource:@"MOVIE" ofType:@"MP4"]]; 

MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(moviePlayBackDidFinish:) 
              name:MPMoviePlayerPlaybackDidFinishNotification 
              object:moviePlayer]; 

moviePlayer.controlStyle = MPMovieControlStyleNone; 
moviePlayer.repeatMode = MPMovieRepeatModeOne; 
moviePlayer.shouldAutoplay = YES; 
moviePlayer.scalingMode = MPMovieScalingModeFill; 
[moviePlayer.view setFrame:CGRectMake(0,0,1330,320)]; 

[scrollView setBackgroundColor:[UIColor blackColor]]; 
[scrollView setContentSize:CGSizeMake(1330,320)]; 
[scrollView setScrollEnabled: YES]; 
[scrollView setShowsHorizontalScrollIndicator:NO]; 
[scrollView setShowsVerticalScrollIndicator:NO]; 

[scrollView addSubview:moviePlayer.view]; 
[self.view addSubview:scrollView]; 

UIImageView *imageView = [[UIImageView alloc] initWithFrame:image.frame]; 
UIImage *menubar = [UIImage imageNamed:@"BG.jpg"]; 
imageView = [[UIImageView alloc] initWithImage:menubar]; 
imageView.contentMode = UIViewContentModeScaleToFill; 
imageView.frame = CGRectMake(0, 258, imageView.frame.size.width, 25); 
[self.view addSubview:imageView]; 

[imageView setUserInteractionEnabled:YES]; 

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btn setFrame:CGRectMake(0,258,30,25)]; 
[btn addTarget:self action:@selector(buttonPress:) forControlEvents:UIControlEventTouchUpInside]; 
[btn setTitle:@"HOME" forState:UIControlStateNormal]; 

[imageView addSubview:btn]; 

но кнопка не отображается на экране, когда я запускаю симулятор. Что я сделал не так?

+0

Ваша кнопка была видна или нет? – Balu

+0

Нет, это не видно. Он просто показывает изображение, которое я добавляю, используя uiimageview – Kalvin

+0

, как только измените ширину кнопки и проверьте ее? – Balu

ответ

2

Используйте UITapGestureRecognizer с изображением UIImageView. Вам нужно будет установить свойство userInteractionEnabled на YES на изображении.

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

Если вам требуется больше контроля, вам может быть лучше не разделять изображение на 5 и вместо этого создавать 5 UIButton экземпляров.

+0

, если я использую UITapGestureRecognizer, как я могу установить положение жесты касания – Kalvin

+0

Вы не устанавливаете положение жесты касания. Вы назначаете жест tap для представления. Жест коснется вас, где в точке зрения произошел щелчок. – rmaddy

4

Использование жест распознаватель это плохая идея, потому что:

  1. Это заставляет Вас интерпретировать сенсорные области для каждого подменю самостоятельно.
  2. Это непрозрачно для VoiceOver.
  3. Он не показывает подсветку, когда пользователь прикасается к кнопке. Эти основные моменты помогают пользователю понять, что делает пользовательский интерфейс, поэтому они очень ценны.

Что вы должны сделать, это разделить одно изображение на пять в графическом инструменте, как Photoshop, и сделать каждый из этих нарезает image из UIButton. Вам нужно будет сконструировать выделенные состояния для этих изображений (показано, когда один из них удерживается), но вы все равно должны это делать.

Если необходимо кусочек изображения в коде, вы можете сделать это с помощью UIGraphicsBeginImageContextWithOptions(size, NO, 0.0) и Обращая Ваше большое изображение с помощью drawAtPoint: с соответствующим смещением, чтобы получить кусок вы хотите, но 99,99999% времени, это будет иметь больше смысла обрезать изображения один раз на вашем большом, многообещающем, настенного компьютера Mac, чем каждый раз, когда ваше приложение работает на крошечном, медленном, с питанием от батареи устройстве iOS.

+0

Отделяю, как вы сказали, но я застрял на кнопке, не видно. Можете ли вы помочь мне исправить это? – Kalvin

+0

Если вы создаете кнопки в коде, вам нужно вызвать '-setImage: forState:' с 'UIControlStateNormal' как параметр' state'. Если вы создаете кнопки в Interface Builder, вы должны иметь возможность установить изображение в инспекторе атрибутов (значок слайдера) на боковой панели инспектора. –

+0

Я пытаюсь создать его в построителе интерфейса, но похоже, что видео скрывает кнопку – Kalvin

0

Почему вы добавляете его в режим просмотра изображений? Просто добавьте его в представление. Это решит проблему (как я понимаю).

[imageView addSubview: btn];

Попробуйте как этот

[self.view addSubview: BTN];

Надеется, что это помогает

+0

Я уже пробовал этот, но он все еще не виден – Kalvin

0

вопроса с Ширином кнопки.Попробуйте

это

[БТН setFrame: CGRectMake (0,258,100,50)]

(ширина увеличение до 100)

и вам, возможно, придется изменить цвет заголовка, если ваш фон белый

[btn setTitleColor: [UIColor blackColor] для государства: UIControlStateNormal];

0

вы можете сначала добавить вид кнопки затем добавить ImageView на кнопку см сильфона код:

// Добавить первую кнопку

UIButton * btnImage = [UIButton buttonWithType: UIButtonTypeCustom];

btnImage.frame = CGRectMake(0, 4, 60, 56); 

btnImage.backgroundColor = [UIColor colorWithRed:231.0f/255.0f green:232.0f/255.0f blue:234.0f/255.0f alpha:1.0]; 

btnImage.layer.borderColor = [UIColor colorWithRed:183.0f/255.0f green:184.0f/255.0f blue:186.0f/255.0f alpha:1.0].CGColor; 

btnImage.layer.borderWidth = 1.0f; 

// Add imageview on button 

UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; 
[yourImageView setImage:[UIImage imageNamed:@"myimage.png"]]; 
yourImageView.center = CGPointMake(btnImage.frame.size.width/2, btnImage.frame.size.height/2); 
[btnImage addSubview:yourImageView]; 

[self.view addSubview:btnImage]; 
Смежные вопросы