如何使 UIButton 与 UIScrollView 一起移动

Posted

技术标签:

【中文标题】如何使 UIButton 与 UIScrollView 一起移动【英文标题】:How to make UIButton move with UIScrollView 【发布时间】:2015-08-14 19:40:17 【问题描述】:

我有一个UIScrollView 菜单,它通过激活UIButton 在视口上方和下方移动。问题是当我按下按钮以使UIScrollView 菜单上下移动时,该按钮仅停留在一个位置。我希望UIButton 在激活时说出UIScrollView 菜单的上方。这是它的样子,“开放”是UIButton

这里是来自viewcontroller.mUIScrollViewUIButton 的动画代码。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize scrollView;

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    draw1 = 0;
    scrollView.frame = CGRectMake(0, 300, 480, 55);
    [scrollView setContentSize:CGSizeMake(480, 55)];

    openMenu.frame = CGRectMake(220, 270, 60, 30);


- (IBAction)OpenMenu:(id)sender 
    if (draw1 ==0) 
        draw1 = 1;
        [UIView animateWithDuration:0.5
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^
                             scrollView.frame = CGRectMake(0, 1000, 568, 200);
                             openMenu.frame = CGRectMake(220, 200, 60, 30);
                         
                         completion:^(BOOL finished)
                             NSLog(@"Done!");
                         ];
     else 
        draw1 = 0;
        [UIView animateWithDuration:0.5
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^
                             scrollView.frame = CGRectMake(0, 300, 568, 200);
                             openMenu.frame = CGRectMake(220, 270, 60, 30);
                         
                         completion:^(BOOL finished)
                             NSLog(@"Done!");
                         ];
    

我希望“打开”按钮位于绿色 UIScrollView 上方(而不是在其上方),我该怎么做?

【问题讨论】:

您是从用户界面创建 openMenu 吗?如果是,请确保 openMenu 与 IBOutlet 连接 @C_X 与IBoutlet相连。 你添加一些约束,更新 viewDidLayoutSubviews 中的框架....? 不,这不是我的代码的一部分。 【参考方案1】:

好的,把openMenu.frame = <frame>改成openMenu.layer.frame = <frame>

你的代码应该是这样的 设置初始帧添加此方法

- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];
    draw1 = 1;
    openMenu.layer.frame = CGRectMake(self.view.center.x - 30, self.view.frame.size.height - 80, 60, 30);


 - (IBAction)OpenMenu:(id)sender 
    if (draw1 ==0) 
        draw1 = 1;
        [UIView animateWithDuration:0.5
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^
                             scrollView.frame = CGRectMake(0, 1000, 568, 200);
                             openMenu.layer.frame = CGRectMake(self.view.center.x - 30, self.view.frame.size.height - 80, 60, 30);
                         
                         completion:^(BOOL finished)
                             NSLog(@"Done!");
                         ];
     else 
        draw1 = 0;
        [UIView animateWithDuration:0.5
                              delay:0.0
                            options: UIViewAnimationOptionCurveEaseOut
                         animations:^
                             scrollView.frame = CGRectMake(0, 300, 568, 200);
                             openMenu.layer.frame = CGRectMake(self.view.center.x - 30, 270, 60, 30);
                         
                         completion:^(BOOL finished)
                             NSLog(@"Done!");
                         ];
    

【讨论】:

在动画块里面,我用你的代码更新了答案 这就是发生的事情,当我按下按钮时,它会移动到靠近顶部的左侧。当我再次按下它时,按钮向下移动并出现菜单。当我最后一次按下它时,按钮回到顶部附近的左侧。看起来像这样 - s2.postimg.org/sb5vzhpqh/unnamed_2.png 我有两个错误。第一个 - 在这一行的“ViewController *”类型的对象上找不到属性“draw” - self.draw = 1; 这是你的画1,我认为你可以改变它 第二个说 - 在“ViewController”类型的对象上找不到属性“openMenu”*:您的意思是访问实例变量“openMenu”吗?

以上是关于如何使 UIButton 与 UIScrollView 一起移动的主要内容,如果未能解决你的问题,请参考以下文章

如何使 UIButton 导致 UITextField 开始编辑文本

如何使自定义 UIButton 变暗

如何使没有文本的 UIButton 成为其图像的大小?

按下时如何使 UIButton 收缩为 UIActivityIndi​​cator?

如何使 UIButton 悬垂在父视图上并仍然使其全部可选?

如何使这个 UIButton 的动作正确运行?