欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

IOS MenuViewController实现弹出菜单效果

程序员文章站 2023-12-21 12:44:52
在写项目时,要实现一个从下移上来的一个弹出菜单,并且背景变深的这么一个效果,在此分享给大家。 主要说一下思路及一些核心代码贴出来,要想下载源码,请点击下载:menuv...

在写项目时,要实现一个从下移上来的一个弹出菜单,并且背景变深的这么一个效果,在此分享给大家。

主要说一下思路及一些核心代码贴出来,要想下载源码,请点击下载:menuviewcontroller

一个简单,效果好,比较实用的菜单弹出效果的实现,效果图:

IOS MenuViewController实现弹出菜单效果

实现方式:将self.view当前页面缩小,在当前页的上面添加一个菜单的view,即在self.view.superview添加。

//显示 
- (void) show:(uiview*)parent 
{ 
  parentview = parent; 
   
  //先隐藏backview,table 
  backview.alpha = 0; 
  _table.alpha = 0; 
   
  //移动table 
  [_table settransform:cgaffinetransformmaketranslation(0, _table.frame.size.height)]; 
   
  //父窗口添加本view,---这个会调用viewdidload 
  [parentview.superview addsubview:self.view]; 
   
  //添加动画,添加到父窗口中,使之从下移动上 
  [uiview animatewithduration:0.3 animations:^{ 
    //父窗口缩小 
    cgaffinetransform t = cgaffinetransformmakescale(0.9, 0.9); 
    [parentview settransform:t]; 
     
    //显示backview,table 
    backview.alpha = 1; 
    _table.alpha = 1; 
     
    //移动table,cgaffinetransformidentity还原原始坐标 
    [_table settransform:cgaffinetransformidentity]; 
 
  } completion:^(bool finished) { 
     
  }]; 
   
   
} 
//隐藏 
- (void) hide 
{ 
  //添加动画,添加到父窗口中,使之从下移动上 
  [uiview animatewithduration:0.3 animations:^{ 
    //父窗口还原  
    cgaffinetransform t = cgaffinetransformidentity; 
    [parentview settransform:t]; 
     
    //显示backview,table 
    backview.alpha = 0; 
    _table.alpha = 0; 
     
    //移动table 
    [_table settransform:cgaffinetransformmaketranslation(0, _table.frame.size.height)]; 
     
  } completion:^(bool finished) { 
    [self.view removefromsuperview]; 
  }]; 
} 
 
- (void)viewdidload 
{ 
  [super viewdidload]; 
   
  self.view.backgroundcolor = [uicolor clearcolor]; 
   
  //背影黑罩 
  backview = [[uiview alloc]initwithframe:self.view.bounds]; 
  backview.backgroundcolor = [uicolor colorwithred:0 green:0 blue:0 alpha:0.3]; 
  [self.view addsubview:backview]; 
   
  //算出table的cgrect 
  cgrect rect = self.view.bounds; 
  int height = _titlearray.count * 44; 
  rect.origin.y = rect.size.height - height; 
  rect.size.height = height; 
   
  _table = [[uitableview alloc]initwithframe:rect]; 
  _table.delegate = self; 
  _table.datasource = self; 
  [self.view addsubview:_table]; 
 
} 

这个菜单你可以任意自定义,我这里是一个tableview,你可以写一些有图和文字的添加上去。只需要把源代码稍改,就ok!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: