草庐IT

iphone - 动画调整 UIButton 的宽度

coder 2024-01-21 原文

我在调整按钮宽度的动画时遇到了一些麻烦。这是我的代码:

- (IBAction)profileButtonPressed:(UIButton *)sender {
    UIImage *buttonProfileDefault = [[UIImage imageNamed:@"Profile_Button_Default"] resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 3)];
    [sender setBackgroundImage:buttonProfileDefault forState:UIControlStateNormal];

    UIImage *buttonProfileDefaultDown = [[UIImage imageNamed:@"Profile_Button_Default_Down"] resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 3)];
    [sender setBackgroundImage:buttonProfileDefaultDown forState:UIControlStateHighlighted];

    [sender setTitle:@"LOG OUT" forState:UIControlStateNormal];

    sender.titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    sender.imageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    // Animate
    CGRect originalFrame = sender.frame;
    originalFrame.size.width = sender.frame.size.width+60;
    [UIView animateWithDuration:1.5 animations:^{
        sender.frame = originalFrame;
    }];
}

它改变了按钮的宽度(除非我去掉了改变标题的那段代码),但它不是通过动画来实现的。

有什么建议可能是错误的吗?

更新

所以我设法为宽度变化设置动画,但将 setTitle 放在动画部分,但它没有为文本本身获得正确的宽度(下图)。我怎样才能做到这一点?

解决方案

所以我最终以编程方式放置了 uibutton。似乎是自动布局导致了问题。

这只是我的问题,还是 Objective C 中的很多东西都很笨拙?!

最佳答案

我怀疑您的问题与内在内容大小有关。如果已设置(我认为这是默认设置),那么当您更改标题时,按钮将更改大小,没有动画,您无需在代码中执行任何操作。有几种方法可以解决这个问题。我认为最简单的方法是将 IB 中的按钮尺寸扩大一点,即使是一个像素也足以让 IB 设置明确的宽度(或者您可以自己设置)。然后在代码中,你可以这样做:

-(IBAction)buttonClick:(UIButton *)sender {
    [sender setTitle:@"Log Out Immediately" forState:UIControlStateNormal];
    [self.button removeConstraint:self.lengthConstraint];
    [UIView animateWithDuration:.5 animations:^{
        self.button.frame = CGRectMake(self.button.frame.origin.x, self.button.frame.origin.y, 250, 44);
    }];
}

self.lengthConstraint 是在 IB 中设置的那个长度约束的 IBOutlet。

另一种方法是使用 NSTimer 更改约束方法中的常量。这是 WWDC 2012 talk“Best Practices for Mastering Auto Layout”中提到的方法之一:

-(IBAction)buttonClick:(UIButton *)sender {
    [sender setTitle:@"Log Out Immediately" forState:UIControlStateNormal];
    [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(expandButton:) userInfo:nil repeats:YES];
}

-(void)expandButton:(NSTimer *) timer {
    self.lengthConstraint.constant += 2;
    if (self.lengthConstraint.constant > 170) [timer invalidate];
}

关于iphone - 动画调整 UIButton 的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13575522/

有关iphone - 动画调整 UIButton 的宽度的更多相关文章

  1. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  2. LVGL V8动画 - 2

    动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim

  3. Ruby:检查东亚宽度 (Unicode) - 2

    使用Ruby,我必须将字符串以柱状格式输出到终端。像这样:|row1|astringhere|etc|row2|anotherstring|etc我可以使用String#ljust和%s处理拉丁UTF8字符。但是当字符是韩文、中文等时就会出现问题。当英文行与包含韩文等的行交错时,列根本不会对齐。如何在此处实现列对齐?有没有办法以等同于固定宽度字体的方式输出亚洲字符?对于要在Vim中显示和编辑的文档怎么样? 最佳答案 您的问题发生在CJK(中文/日文/韩文)full-widthandwidecharacters(也向下滚动图表);这些

  4. ruby - Carrierwave + MiniMagick - 如何将动画 GIF 压缩到第一帧? - 2

    有人知道如何使用Carrierwave+MiniMagick将动画GIF压缩到第一帧吗? 最佳答案 我认为MiniMagick有一些变化,因为我只花了三个小时试图找出为什么Andrey的代码对我不起作用。我收到以下错误:ActiveRecord::RecordInvalid(Validationfailed:ImageFailedtomanipulatewithMiniMagick,maybeitisnotanimage?OriginalError:Command("mogrify-scene/var/folders/0o/0oqN

  5. ruby-on-rails - 回形针调整大小并裁剪为矩形 - 2

    所以我期待一系列不同尺寸和纵横比的照片。我希望能够缩小/拉伸(stretch)照片以尽可能适合200x100矩形,然后裁剪不适合的其余部分。我希望裁剪也发生在中心周围。这可能吗?我对imagemagick文档感到很困惑。谢谢! 最佳答案 Paperclip的#选项将完全满足您的需求:在指定尺寸内最大程度地适应图像,然后在中心处利用重力裁剪多余部分。例子:has_attached_file:photo,:styles=>{:original=>"200x100#"}注意:如果您想保持原样不变并生成额外的裁剪缩略图,只需将:origin

  6. ruby - 我如何在 Ruby 中计算字符串的宽度? - 2

    String.length只会告诉我字符串中有多少个字符。(其实在Ruby1.9之前,它只会告诉我多少个字节,这就更没用了。)我真的很想知道一个字符串有多少个“en”宽。例如:'foo'.width#=>3'moo'.width#=>3.5#m's,w's,etc.arewide'foi'.width#=>2.5#i's,j's,etc.arenarrow'foobar'.width#=>6.25#spacesareverynarrow如果我能得到字符串的第一个n就更好了:'foo'[0,2.en]#=>"fo"'filial'[0,3.en]#=>"fili"'foobarbaz'[

  7. ruby - 在 Ruby 的正则表达式中,前瞻和后视概念如何支持这种零宽度断言概念? - 2

    我刚刚经历了这个概念Zero-WidthAssertions从文档中。我想到了一些快速的问题-为什么这样的名字Zero-WidthAssertions?Look-ahead怎么了和look-behind概念支持这样的Zero-WidthAssertions概念?什么这样的?,,=s,-4个符号在模式内指示?你能帮我集中精力了解实际发生的事情我还尝试了一些小代码来理解逻辑,但对它们的输出没有那么自信:irb(main):001:0>"foresight".sub(/(?!s)ight/,'ee')=>"foresee"irb(main):002:0>"foresight".sub(/(?

  8. iphone - 扩展 restful_authentication/AuthLogic 以支持匿名 iPhone 的延迟登录的最佳方法是什么? - 2

    我正在构建一个与RubyonRails后端对话的iPhone应用程序。RubyonRails应用程序还将为Web用户提供服务。restful_authentication插件是提供快速和可定制的用户身份验证的绝佳方式。但是,我希望iPhone应用程序的用户在新列中存储一个由手机的唯一标识符([[UIDevicedevice]uniqueIdentifier])自动创建的帐户。稍后,当用户准备好创建用户名/密码时,帐户将更新为包含用户名和密码,iPhone唯一标识符保持不变。用户在设置用户名/密码之前不能访问该网站。然而,他们可以使用iPhone应用程序,因为该应用程序可以使用它的标识符

  9. ruby - 如何调整 pry 色 - 2

    编辑:褪色灰色仅是0.9.7.3及之前版本的问题。它后来变成了深灰色。Pry具有很好的着色效果,但创建或更改对象时返回的值是我几乎看不到的褪色灰色。u=User.new=>#我尝试修改.pryrc中的值,但无法更改此颜色或与此相关的任何其他颜色。 最佳答案 Pry使用CodeRay进行着色,因此您可以将以下内容放入您的.pryrc文件中:CodeRay.scan("example",:ruby).term#justtoloadnecessaryfilesTERM_TOKEN_COLORS={:symbol=>'1;31'#willm

  10. iphone - 设计和 Rails 3 中的 http 身份验证 - 2

    我有一个使用deviseonrails3的应用程序。我想启用http身份验证,以便我可以从iPhone应用程序向我的网络应用程序进行身份验证。如何从我的iPhone应用程序进行身份验证以进行设计?这安全吗?还是我应该进行不同的身份验证? 最佳答案 从设计的角度来看,您有3个选择:1)使用基本的http身份验证:您的iPhone应用程序有一个secretkey-这是在您的iPhone应用程序代码中烘焙的-用于对网络应用程序的每个请求进行身份验证。Google搜索:“设计基本的http身份验证”2)您可以通过在您的iPhone应用程序中

随机推荐