我如何制作可点击的uiimage?

时间:2013-05-19 01:52:09

标签: ios objective-c uiimageview uiimage

我有一个菜单栏作为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];

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

5 个答案:

答案 0 :(得分:4)

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

  1. 它会强制您自己解释每个子菜单的触摸区域。
  2. 对VoiceOver不透明。
  3. 当用户触摸按钮时,它不会显示突出显示。这些突出显示有助于用户了解用户界面正在做什么,因此它们非常有价值。
  4. 您应该做的是在Photoshop等图形工具中将单个图像拆分为五个,并将每个切片设为image的{​​{1}}。你需要为这些图像设计突出显示的状态(当其中一个被按下时显示),但你应该这样做。

    如果必须在代码中对图像进行切片,则可以使用UIButton并使用UIGraphicsBeginImageContextWithOptions(size, NO, 0.0)使用适当的偏移量绘制大图像来获取切片想要,但99.99999%的时间,将你的应用程序运行在一个小巧,缓慢,电池供电的iOS设备上,在你的大而强劲的墙上插座驱动的Mac上切割图像会更有意义。

答案 1 :(得分:2)

使用包含图片的UITapGestureRecognizer的{​​{1}}。您需要在图片视图中将UIImageView属性设置为userInteractionEnabled

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

如果您想要更多控制权,最好将图像拆分为5并改为创建5个YES实例。

答案 2 :(得分:0)

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

  

[imageView addSubview:btn];

试试这个

  

[self.view addSubview:btn];

希望这有帮助

答案 3 :(得分:0)

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

这个

  

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

(将宽度增加到100)

如果背景为白色,则可能需要更改标题颜色

  

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

答案 4 :(得分: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];