Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何仅从右向左扩展UIButton宽度_Iphone_Ios_Uibutton_Uianimation - Fatal编程技术网

Iphone 如何仅从右向左扩展UIButton宽度

Iphone 如何仅从右向左扩展UIButton宽度,iphone,ios,uibutton,uianimation,Iphone,Ios,Uibutton,Uianimation,我想知道如何将UIButton的宽度仅扩展到左侧,这与向左扩展的app store按钮非常相似。然而,我有多个按钮的支出 编辑这是工作代码: //viewdidload buttonCaption = [UIButton buttonWithType:UIButtonTypeCustom]; //default placement buttonCaption.frame = CGRectMake(245, 385, 70, 30); //default width size [self next

我想知道如何将UIButton的宽度仅扩展到左侧,这与向左扩展的app store按钮非常相似。然而,我有多个按钮的支出

编辑这是工作代码:

//viewdidload
buttonCaption = [UIButton buttonWithType:UIButtonTypeCustom];
//default placement
buttonCaption.frame = CGRectMake(245, 385, 70, 30); //default width size
[self nextAnimation:buttonCaption.frame.size.width]; 

将默认值传递给动画

-(void)nextAnimation:(float)previousWidth {

//button setting
buttonCaption.titleLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin ;
//buttonCaption.titleLabel.font =[UIFont systemFontOfSize:20];
[[buttonCaption layer] setCornerRadius:5.0f];
[[buttonCaption layer] setMasksToBounds:YES];
[[buttonCaption layer] setBackgroundColor:[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.7] CGColor]];   
[buttonCaption.titleLabel setFrame:CGRectMake(0,0, 25, 25)];   
CGSize stringsize = [tempCaption sizeWithFont:[UIFont systemFontOfSize:20]];  
CGFloat diff = stringsize.width - previousWidth;
NSLog(@"diff %f",diff);



 [UIView animateWithDuration:0.5

                  animations:^{ 
                    [buttonCaption setFrame:CGRectMake(buttonCaption.frame.origin.x-diff, 
                                                       buttonCaption.frame.origin.y, 
                                                       buttonCaption.frame.size.width + diff, 
                                                       buttonCaption.frame.size.height)];                


                  } 
                  completion:^(BOOL  completed)
                {
[self nextAnimation:stringsize.width];
                }
  ]; 
}   

您需要旧宽度和新宽度之间的差异-称之为
widthChange
。然后,按如下方式计算新帧:

CGRect newFrame = buttonCaption.frame;
newFrame.origin.x -=  widthChange;
newFrame.size.width += widthChange;
现在,这是唯一可以设置动画的对象:

buttonCaption.frame = newFrame; 

基本上,您需要在扩展宽度的同时向左移动x原点

尝试此块动画代码

[UIView animateWithDuration:0.5f 
                 animations:^{ 
                     float kOfset = 0.25f;
                     CGFloat newSizeX = buttonCaption.frame.size.width*(1+kOfset);
                     CGFloat ofsetX = buttonCaption.frame.size.width*kOfset;
                     [buttonCaption setFrame:CGRectMake(buttonCaption.frame.origin.x-ofsetX, buttonCaption.frame.origin.y, newSizeX, buttonCaption.frame.size.height)];                
                 }
                 completion:^(BOOL finished){  }];

kOfset
更改为所需的值(大小单位为%)。

谢谢@berylium,代码从右向左扩展,但是当text.width较小时,它不会重新调整大小。想解释一下代码是如何工作的吗?它只是设置一个新的框架
[按钮选项setFrame:…
设置一个新的框架以重新调整大小吗?我有5个不同的字符串大小,我从这里得到的值是CGSize stringsize=[tempCaption sizeWithFont:[UIFont systemFontOfSize:20]];有些可能比其他的长,所以我需要它动态调整大小。谢谢jrturton,您能分享一些示例代码吗?除了我的问题之外,我不确定还能添加什么。您在哪部分遇到问题?
[UIView animateWithDuration:0.5f 
                 animations:^{ 
                     float kOfset = 0.25f;
                     CGFloat newSizeX = buttonCaption.frame.size.width*(1+kOfset);
                     CGFloat ofsetX = buttonCaption.frame.size.width*kOfset;
                     [buttonCaption setFrame:CGRectMake(buttonCaption.frame.origin.x-ofsetX, buttonCaption.frame.origin.y, newSizeX, buttonCaption.frame.size.height)];                
                 }
                 completion:^(BOOL finished){  }];