1

我有一个菜单栏作为 uiimage。我想让这个菜单栏上的 5 个菜单是可点击的并链接到另一个视图。谁能告诉我该怎么做?我发现人们在 uiimage 上使用 uibutton,这对我来说很好吗,我怎样才能将菜单栏分成 5 块。

感谢 rmaddy 和 Brent Royal-Gordon

我决定使用 uiimage 作为菜单栏背景并在其上添加 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];

但是当我在模拟器上运行时,该按钮在屏幕上不可见。我做错了什么?

4

5 回答 5

4

使用手势识别器是个坏主意,因为:

  1. 它迫使您自己解释每个子菜单的触摸区域。
  2. 它对 VoiceOver 是不透明的。
  3. 当用户触摸按钮时,它不会显示突出显示。这些亮点有助于用户了解用户界面在做什么,因此它们非常有价值。

您应该做的是在 Photoshop 等图形工具中将单个图像拆分为五个,并将这些切片中的每一个都制作imageUIButton. 您需要为这些图像设计突出显示的状态(当其中一个被按住时显示),但无论如何您都应该这样做。

如果您必须在代码中对图像进行切片,您可以通过使用并使用适当的偏移量UIGraphicsBeginImageContextWithOptions(size, NO, 0.0)绘制大图像来获得所需的切片,但在 99.99999% 的情况下,将图像切片一次会更有意义drawAtPoint:在你的大型、功能强大、通过墙插供电的 Mac 上运行,比每次在小型、缓慢、电池供电的 iOS 设备上运行应用程序时都要好得多。

于 2013-05-19T02:30:05.290 回答
2

将 aUITapGestureRecognizerUIImageView包含您的图像一起使用。您需要将userInteractionEnabled属性设置为YES在图像视图上。

当您收到点击事件时,请查看视图中点击发生的位置。根据位置,执行五个菜单操作之一。

如果您想要更多控制,最好将图像分成 5 个并创建 5 个UIButton实例。

于 2013-05-19T02:13:57.027 回答
0

you Can first add button view then add imageview on the button please see bellow code :

//Add first button

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];
于 2013-10-28T14:26:38.330 回答
0

为什么将按钮添加到图像视图?只需将其添加到视图中。它将解决问题(据我所知)。

[imageView addSubview:btn];

像这样试试

[self.view addSubview:btn];

希望这可以帮助

于 2013-05-20T11:33:42.293 回答
0

问题在于按钮的宽度。尝试

这个

[btn setFrame:CGRectMake(0,258,100,50)]

(将宽度增加到 100)

如果您的背景是白色,您可能需要更改标题颜色

[btn setTitleColor:[UIColor blackColor] forState: UIControlStateNormal];

于 2013-05-21T04:08:58.497 回答