如何以定时速率动态调整对象大小

时间:2013-11-15 09:21:52

标签: ios animation

触摸对象时调整对象大小的最佳方法是什么?

基本上,我想要一个盒子(最好是一个可以有圆角的盒子)。单击框的左半部分时,框将在y轴上缓慢平滑地增大,向下推动其下方相似类型的对象。单击框的右半部分时,框将缓慢平滑地缩小。

我想知道我应该使用什么类型的对象。我在想按钮,因为它们可以有圆角(How to round the corners of a button)。我将有一个大按钮,其中有一个彩色背景和两个较小的按钮,每个按钮占据父按钮的一半。

我将按从上到下的升序给出所有按钮整数标识符。当按钮3变大时,我将相应地向下移动所有按钮4和向上。

基本上,按钮只能是固定尺寸(简单来说,只说10的倍数),但我希望它们能够在这些尺寸之间平滑移动。此外,当用户第一次点击按钮时,我希望动画开始并线性地继续,直到用户移开他们的手指,此时我希望它动画到10的下一个倍数。我应该怎么做这个部分?

我还需要制作包含可滚动按钮的视图,因为我希望人们能够制作比屏幕高度更高的盒子。我怎么能这样做呢?

如果您有任何其他建议,也欢迎他们。

1 个答案:

答案 0 :(得分:2)

对其他UI元素的角进行舍入没有问题,您只需要包含

#import <QuartzCore/QuartzCore.h>

//and create corner on layer of ui element
[_myView.layer setCornerRadius:8.0f];

要检测已点击的部分,请使用this post中的方法touchesBegan:touchesEnded:。每次单击屏幕时,您都必须检测触摸是否在您的ui元素上,以及它是在左侧还是右侧。

要为您的ui元素设置动画,我建议为category创建UIView。例如,此代码会将您的元素移动到另一个位置:

- (void)animateMyViewWithDuration:(float)duration 
            andRepeat:(int)repeat{

    [UIView animateWithDuration:duration animations:^{
        self.frame = CGRectMake(self.frame.origin.x,
                                  self.frame.origin.y + 20,
                                  self.frame.size.width,
                                  self.frame.size.height);
    } completion:^(BOOL finished) {

        if(repeat > 0){
           [self animateMyView:view 
                  withDuration:duration 
                     andRepeat:(repeat - 1)];
        }
    }];
}

将其添加到新类别中,在UIViewController

中加入类别
#import "UIView+CategoryName.h"

如果触摸符合您的需要,请在touch方法中调用它:

[_myView animateMyViewWithDuration:0.2f andRepeat:5];

您可以编写类别方法来移动您想要的视图,如果您这样做,您可以在下一个项目中使用新类别。