Ios 如何制作Spotify这样的菜单
好的,正如问题所暗示的,我想制作一个类似spotify应用程序目前所拥有的菜单。 我在中遇到过类似的代码,但我想知道如何在DIY(自己动手)级别上实现这一点 我能理解需要一个页面浏览控制器,但我丢了。请给我指一下正确的方向 编辑 为了让人们正确理解我所说的需求,这里有一个png 请注意,顶部的菜单以下划线作为选定菜单进行滑动 我发布的github链接是一个实现这一点的库,但它是swift,所以有人能告诉我如何在objective c中实现这一点吗Ios 如何制作Spotify这样的菜单,ios,Ios,好的,正如问题所暗示的,我想制作一个类似spotify应用程序目前所拥有的菜单。 我在中遇到过类似的代码,但我想知道如何在DIY(自己动手)级别上实现这一点 我能理解需要一个页面浏览控制器,但我丢了。请给我指一下正确的方向 编辑 为了让人们正确理解我所说的需求,这里有一个png 请注意,顶部的菜单以下划线作为选定菜单进行滑动 我发布的github链接是一个实现这一点的库,但它是swift,所以有人能告诉我如何在objective c中实现这一点吗 关于我制作了一个类似的示例,但它是在Swift
关于我制作了一个类似的示例,但它是在Swift 2.0中。看一看。也许这会有所帮助 在下面发布的示例链接中,您询问的查询可以通过以下方式完成。
我们可以使用此方法首先在页面视图顶部设置按钮
按照您的说法,这是顶部菜单
func setupSegmentButtons(){
navigationView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, (self.navigationController?.navigationBar.frame.size.height)! - 4))
//navigationView.backgroundColor = UIColor.redColor()
navigationView.layoutIfNeeded()
let numControllers:NSInteger = viewControllerArray.count
if(buttonText == nil)
{
buttonText = NSArray(objects: "First","Second","Third")
}
let buttonWidth:CGFloat = self.view.frame.size.width/CGFloat(numControllers)
for (var i = 0; i < numControllers; i++) {
let button:UIButton = UIButton(frame: CGRectMake( CGFloat(i) * buttonWidth, 0, buttonWidth, 40))
button.addTarget(self, action: "tapSegmentButtonAction:", forControlEvents: .TouchUpInside)
navigationView.addSubview(button)
button.tag = i
button.titleLabel?.font = UIFont(name: "Helvetica", size: 14)
button.setTitleColor(UIColor.blackColor(), forState: .Normal)
button.setTitle(buttonText.objectAtIndex(i) as? String, forState: .Normal)
}
self.view.addSubview(navigationView)
self.setupSelector()
}
现在,我们可以使用滚动视图的scrollViewDidScroll委托,使选择栏视图向所选菜单滑动。每当滚动页面视图控制器时调用此委托时,我们都会随时更改所选条形图的框架
func scrollViewDidScroll(scrollView: UIScrollView) {
let xFromCenter : CGFloat = self.view.frame.size.width-scrollView.contentOffset.x;
let xCoors : CGFloat = X_BUFFER + selectionBar.frame.size.width * CGFloat(currentPageIndex) - X_OFFSET
_ = selectionBar.frame
if(CGFloat(xCoors)-xFromCenter / CGFloat(viewControllerArray.count) > self.view.frame.size.width - selectionBar.frame.width)
{
selectionBar.frame = CGRectMake(self.view.frame.size.width - selectionBar.frame.width, selectionBar.frame.origin.y, selectionBar.frame.size.width, selectionBar.frame.size.height);
}
else if(CGFloat(xCoors)-xFromCenter / CGFloat(viewControllerArray.count) < 0)
{
selectionBar.frame = CGRectMake(0, selectionBar.frame.origin.y, selectionBar.frame.size.width, selectionBar.frame.size.height);
}
else
{
selectionBar.frame = CGRectMake(CGFloat(xCoors)-xFromCenter/CGFloat(viewControllerArray.count), selectionBar.frame.origin.y, selectionBar.frame.size.width, selectionBar.frame.size.height);
}
}
func scrollViewDidScroll(scrollView:UIScrollView){
让xFromCenter:CGFloat=self.view.frame.size.width scrollView.contentOffset.x;
设xCoors:CGFloat=X_缓冲区+selectionBar.frame.size.width*CGFloat(currentPageIndex)-X_偏移量
_=selectionBar.frame
if(cgloat(xCoors)-xFromCenter/cgloat(viewControllerArray.count)>self.view.frame.size.width-selectionBar.frame.width)
{
selectionBar.frame=CGRectMake(self.view.frame.size.width-selectionBar.frame.width,selectionBar.frame.origin.y,selectionBar.frame.size.width,selectionBar.frame.size.height);
}
else if(cgloat(xCoors)-xFromCenter/cgloat(viewControllerArray.count)<0)
{
selectionBar.frame=CGRectMake(0,selectionBar.frame.origin.y,selectionBar.frame.size.width,selectionBar.frame.size.height);
}
其他的
{
selectionBar.frame=CGRectMake(cgloat(xCoors)-xFromCenter/cgloat(viewControllerArray.count),selectionBar.frame.origin.y,selectionBar.frame.size.width,selectionBar.frame.size.height);
}
}
有关更多详细信息,请参见下面的示例链接
查看本教程请在评论之前阅读问题,我不想要幻灯片,我想要像sportify一样的顶部菜单。只需查看一些pageviewcontroller教程。抱歉,我误解了您的问题我知道如何实现页面视图控制器,但问题是维护活动菜单和下划线@RajanMaheshwari@KevinGuan我已经更新了答案,包括了问题作者所问的链接中的重要部分。谢谢,现在看起来很棒;)
func scrollViewDidScroll(scrollView: UIScrollView) {
let xFromCenter : CGFloat = self.view.frame.size.width-scrollView.contentOffset.x;
let xCoors : CGFloat = X_BUFFER + selectionBar.frame.size.width * CGFloat(currentPageIndex) - X_OFFSET
_ = selectionBar.frame
if(CGFloat(xCoors)-xFromCenter / CGFloat(viewControllerArray.count) > self.view.frame.size.width - selectionBar.frame.width)
{
selectionBar.frame = CGRectMake(self.view.frame.size.width - selectionBar.frame.width, selectionBar.frame.origin.y, selectionBar.frame.size.width, selectionBar.frame.size.height);
}
else if(CGFloat(xCoors)-xFromCenter / CGFloat(viewControllerArray.count) < 0)
{
selectionBar.frame = CGRectMake(0, selectionBar.frame.origin.y, selectionBar.frame.size.width, selectionBar.frame.size.height);
}
else
{
selectionBar.frame = CGRectMake(CGFloat(xCoors)-xFromCenter/CGFloat(viewControllerArray.count), selectionBar.frame.origin.y, selectionBar.frame.size.width, selectionBar.frame.size.height);
}
}