Objective c UIBarButtonItem刷新动画是偏移的
这确实显示了与我自己类似的问题,但提供的答案并不能解决我的问题 我有一个刷新按钮,当它被点击时,我会设置它的动画。这是一个UIBarbuttonite,在故事板中创建,我用来创建的图像是: AFAIK-图像为方形,所描绘的圆圈居中且真实 当我点击图像时,我称之为动画代码:Objective c UIBarButtonItem刷新动画是偏移的,objective-c,cgaffinetransform,uibuttonbaritem,Objective C,Cgaffinetransform,Uibuttonbaritem,这确实显示了与我自己类似的问题,但提供的答案并不能解决我的问题 我有一个刷新按钮,当它被点击时,我会设置它的动画。这是一个UIBarbuttonite,在故事板中创建,我用来创建的图像是: AFAIK-图像为方形,所描绘的圆圈居中且真实 当我点击图像时,我称之为动画代码: #define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) - (void)animateRefreshButton; { UIBarButtonItem *
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
- (void)animateRefreshButton;
{
UIBarButtonItem *item = self.refreshButton;
UIView *view = [item valueForKey:@"view"];
[UIView animateWithDuration:0.5 delay:0.3 options:UIViewAnimationOptionCurveEaseInOut animations: ^
{
view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(180));
} completion: ^(BOOL finished)
{
view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0));
}];
}
但是,动画会“跳跃”,并且还会影响标题。参见gif:
我尝试了很多东西,但上面的视频是关于我能得到的最好的动画。我尝试过的事情包括:
- 将图像添加到按钮的自定义视图并设置动画
- 调整图像插入(但在每个设备和旋转上都不同)
- 调整图像本身的大小以匹配大小 导航栏“将其转换为”,约50x30
- 应用不同的动画块来尝试和遮罩“跳跃”(可怕)
我确实检查了图像,它看起来很好,但是有人可能知道得更好。好的-秘密是发现默认情况下,uibarbuttonite使用的图像大小被重新调整为50x30
UIBarButtonItem *item = self.refreshButton;
UIView *view = [item valueForKey:@"view"];
在这一点上,我放了一个断点并检查了视图的框架,它的大小是50 x 30
此外,我还添加了一个旋转图像的自定义视图,大小为50 x 30,并对按钮进行了旋转
#pragma mark - UIRefreshControl method(s)
- (void)configureSpinningView;
{
// 50x30 is the size that the nav bar sets for the buttons image...
self.refreshControlSpinningImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
self.refreshControlSpinningImageView.image = [UIImage imageNamed:@"btnSync"];
self.refreshControlSpinningImageView.autoresizingMask = UIViewAutoresizingNone;
self.refreshControlSpinningImageView.contentMode = UIViewContentModeCenter;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(refreshTapped:)];
[self.refreshControlSpinningImageView addGestureRecognizer:tapRecognizer];
}
#pragma mark - aimation(s)
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
- (void)animateRefreshButton;
{
[self.refreshButton setCustomView:self.refreshControlSpinningImageView];
[UIView animateWithDuration:0.5 delay:0.3
options:UIViewAnimationOptionCurveEaseInOut animations: ^
{
self.refreshControlSpinningImageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(180));
} completion: ^(BOOL finished)
{
self.refreshControlSpinningImageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0));
[self.refreshButton setCustomView:nil];
}];
}
#pragma mark - IBAction(s)
- (IBAction)refreshTapped:(UIBarButtonItem *)sender;
{
//deletia
[self animateRefreshButton];
}
以下是修复的视频:
好的-秘密在于发现默认情况下,uibarbuttonite使用的图像大小被重新调整为50x30
UIBarButtonItem *item = self.refreshButton;
UIView *view = [item valueForKey:@"view"];
在这一点上,我放了一个断点并检查了视图的框架,它的大小是50 x 30
此外,我还添加了一个旋转图像的自定义视图,大小为50 x 30,并对按钮进行了旋转
#pragma mark - UIRefreshControl method(s)
- (void)configureSpinningView;
{
// 50x30 is the size that the nav bar sets for the buttons image...
self.refreshControlSpinningImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 30)];
self.refreshControlSpinningImageView.image = [UIImage imageNamed:@"btnSync"];
self.refreshControlSpinningImageView.autoresizingMask = UIViewAutoresizingNone;
self.refreshControlSpinningImageView.contentMode = UIViewContentModeCenter;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(refreshTapped:)];
[self.refreshControlSpinningImageView addGestureRecognizer:tapRecognizer];
}
#pragma mark - aimation(s)
#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI)
- (void)animateRefreshButton;
{
[self.refreshButton setCustomView:self.refreshControlSpinningImageView];
[UIView animateWithDuration:0.5 delay:0.3
options:UIViewAnimationOptionCurveEaseInOut animations: ^
{
self.refreshControlSpinningImageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(180));
} completion: ^(BOOL finished)
{
self.refreshControlSpinningImageView.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0));
[self.refreshButton setCustomView:nil];
}];
}
#pragma mark - IBAction(s)
- (IBAction)refreshTapped:(UIBarButtonItem *)sender;
{
//deletia
[self animateRefreshButton];
}
以下是修复的视频:
实际上,我看不出你的视频有什么问题:点击0.3秒后会有一个初始延迟,图像在1/2秒内旋转180度,标题不会改变。那么,问题出在哪里?点击后图像会向上移动实际上,我在视频中看不到问题:点击0.3秒后会出现初始延迟,图像在1/2秒内旋转180度,并且标题不会更改。那么,问题是什么呢?点击后图像会向上移动