betway必威手机版 > betway必威手机版官网 > 整理项目中遇到的小技巧,UITabBar点击动画

原标题:整理项目中遇到的小技巧,UITabBar点击动画

浏览次数:140 时间:2020-03-18

明天见到谷歌(Google卡塔尔(قطر‎ Design guidelines - Components - Bottom(点击文字跳转,恐怕要翻墙卡塔尔(قطر‎上的TabBar动漫,试着写了刹那间,相比较简陋,仅供游戏,

1、在UITextField中输入内容时,内容向下偏移

解决:UITextFiled在非编辑状态独有一个子类UITextFiledLabel,在编排状态时,UITextField的子类视图产生了更换,有三个子类视图时UITextFieldEditor,那些视图继承自UIScrollView 。 参照他事他说加以考察资料设置调整器的属型automaticallyAdjustsScrollViewInsets = NO。

图片 1

体系地址:GitHub - ZHTabBarAimation。

2、创制xib时,从xib拖线生成对应的本性。在分明xib和对应的类进行关联之后,拖线时不能够转移对应的性质。(Xcode不时即便不好使卡塔尔(قطر‎

解决:在对应类的@interface @end 里手写IBOutlet属性,反向拖线就好了

图片 2

调节器拖线.gif

1.长按抖动;

缩放

3、在有导航栏的景色下设置状态栏(statusBarState of Qatar为lightContent时,失去效用。

解决: self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
状态栏的水彩会碰着导航栏的体裁的影响。

2.抖动时现身多少个X;

图片 3ZHTabBarAnimationStyleScale

4、准确安装导航栏的标题和标签栏标题标精确姿势

解决:  
  childController.navigationItem.title ; 设置导航栏的标题
  childController.tabBarItem.title;设置标签栏的标题
  childControllers.navigationController.tabBarItem.title;有导航栏控制器时设置标签栏的标题

3.点击x,删除button;

位移

5、改过tableViewCell的accessoryView的样色样式(tintColor效用很刚劲,能够安装有些barTintColor,tintColor试一试第三条对状态栏,导航栏的震慑卡塔尔国

解决:tableView.tintColor = [UIColor redColor];

4.抖动时,点击开关,甘休抖动;

图片 4ZHTabBarAnimationStyleTranslation

6、设置tableViewCell的分界线满屏展现

解决: tableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);

下边是本身的安顿思路:

比较轻巧的落实方式,缩放就是在tabBarButton的点击方法中对self.imageView 和 self.titleLabel推行缩放动漫。位移动漫,在每一次选中tabBarButton时以动漫的花样改造button的frame,相同的时候对tabBar中保有的button的imageView和titleLabel重新构造,能够在button的layoutSubViews方法里施行,且无需增加动漫,因为button自身曾在进行动漫了。

7、使用xib设置tableView的headerView的时候,在浮现的时候headerView展现残破

解决: CLDetailHeaderView *headerView = [CLDetailHeaderView detailHeaderView];
  // 计算headerView的大小,设置好frame之后赋值给tableHeaderView才可以计算出合理大小的tableHeaderView
  UIView *header = [[UIView alloc]initWithFrame:headerView.bounds];
  [header addSubview:headerView];

  headerView.foodModel = _foodModel;
  self.tableView.tableHeaderView = header;```

#8、不显示没有内容的tableViewCell

解答: // 8、撤销多余的cell
self.tableView.tableFooterView = [[UIView alloc] init];

#9、在tableView或者collectionView浏览页面的时候,需要回到顶部的时候,在页面上加上一个回到顶部的按钮

解答: [self.tableView setContentOffset:CGPointZero animated:YES];

#10、给系统的readonly属性进行修改,一般会考虑使用KVC。比如自定义标签栏

CLTabBar *myTabBar = [[CLTabBar alloc] init];
[self setValue:myTabBar forKey:@"tabBar"]; // 给系统的tabBar属性赋值进行沟通

  • (void)layoutSubviews{
    [super layoutSubviews];
    // 给tabBar的全数的tabBarButton加多点击事件,然后在点击事件中达成tabBarItem的卡通片效果
    for (UIControl *tabBarButton in self.subviews) {
    if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {

          [tabBarButton addTarget:self action:@selector(tabBarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
      }
    

    }
    }

  • (void)tabBarButtonClick:(UIControl *)tabBarButton
    {
    for (UIView *imageView in tabBarButton.subviews) {
    NSLog(@"%@",tabBarButton.subviews卡塔尔; // 查找供给设置动漫的指标
    if ([imageView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
    //帧动画
    CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
    // 设置动漫类型为缩放动漫
    animation.keyPath = @"transform.scale";
    animation.values = @[@1.0,@1.02,@0.9,@1.02,@0.90,@1.02,@1.0];
    animation.duration = .8;
    // 动漫的进行线性变化
    animation.calculationMode = kCAAnimationCubic;
    //把动漫增添到须求动画的tabBarItem的imageView的layer上
    [imageView.layer addAnimation:animation forKey:nil];
    }
    }
    }

#11、按钮只有图片的时候,设置按钮大小和图片等大

解决:button.bounds.size = button.currentBackgroundImage.size ;

#12、给一个视图添加背景图片

解决:1、view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg"]]; // 纯色图片以平铺的格局设置view的背景
2、view.layer.contents = (__bridge id)([UIImage imageNamed:@"bg"].CGImage);// 设置view的layer的内容

#13、在自定义tabBar时用UIButton替换系统的UITabBarButton时,需要UIButton在点击的时候不要出现闪亮的情况

消除:重写一下UIButton的setHighlighted方法
// 去掉开关的高亮状态

  • (void)setHighlighted:(BOOL)highlighted{
    在这里个法子里面不用调用 super 不然写了一对一于没写
    }
#14、保存按钮的选中状态,需要添加一个按钮属性。@property (nonatomic,strong) UIButton *selectedButton;

解答:

  • (void)selectButton:(UIButton *)sender {
    _selectedButton.selected = NO;
    sender.selected = YES;
    _selectedButton = sender;
    }
#15、在代码编写过程中发现变量名称书写不合理,同时修改多个同名的变量名称

![编辑技巧.gif](http://upload-images.jianshu.io/upload_images/2112071-f14565ed38739460.gif?imageMogr2/auto-orient/strip)

#16、Xcode8注释失效

"那些是因为苹果解决xcode ghost。把插件屏蔽了消释措施

一声令下运营: sudo /usr/libexec/xpccachectl
接下来必需重启Computer后生效 "
或者
(1)查看 Xcode -> Preferences -> KeyBingdings

(2卡塔尔大家可以找到 structure - AddDocumentation 这些就是增多注释的 遵照自身必要能够转移这里必要的急速键,现在改成了 "Alt Command /"

(3卡塔尔国打消// 的注释 的超级快键 也和从前大家常用的 "Command /" 不平等 固然反感 依然能够改回来

(4卡塔尔国改好了脱离 Preferences 到此处笔者的Xcode依旧倒霉使 把Computer重启后 就都再一次不奇怪使用了

#17、获取手机电量,增强手机的续航能力,提高用户体验。 苹果 在 iOS 9 中为 iPhone 添加了低电量模式 。在此模式下,系统会通过禁用一些特性诸如电子邮件自动获取、后台刷新、Hey Siri等,来达到降低能耗的目的。当我们检测到用户开启了低电量模式,可以为用户做一些小改变,来帮助用户延长电池续航。一般我们会停止后台下载任务,停止定位服务,停止网络请求等,来减少手机电池的电量消耗问题。我们可以在控制器中监控手机的电量,当手机电量没低于0.05的电量时就会发送通知,我们可以在接收到通知的时候进行相应的操作。

CGFloat battery = [UIDevice currentDevice].batteryLevel;// 0~1之间
// 在真机上必定要展开允许电瓶监听否则会以为是模仿器 模拟器电量百分百时会是-1
[UIDevice currentDevice].batteryMonitoringEnabled = YES;

#18、设置手机的旋转方向

1、- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES 表示协理具备的方向 下边的不二等秘书诀表示不帮衬向下的倾向
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

2、关于显示器方向的枚举
typedef enum {
UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, // 竖直方向
UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, // 竖直向下
//because rotating the device to the left requires rotating the content to the right. 设备向左旋转 设备展现的剧情向右旋转
UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight,// 横屏向左
UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft横屏向右
} UIInterfaceOrientation;

#19、在升级Cocoapods的时候报下面这个错误的解决办法:

![升级错误信息.png](http://upload-images.jianshu.io/upload_images/2112071-58a83fd87730423d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)

化解办法:实践上边包车型大巴极点命令就好了
$ mkdir -p $HOME/Software/ruby
$ export GEM_HOME=$HOME/Software/ruby
$ gem install cocoapods
$ export PATH=$PATH:$HOME/Sofware/ruby/bin
$ pod --version // 查看pod版本号 验证是还是不是晋级成功

1.继承UIButton;

项目中用到了自定UITabBar,世襲自UIView。其余还应该有通过模型设置tabBarButton的子控件值,具体的兑现格局百度谷歌(GoogleState of Qatar一大堆,这里不写了。这里只贴出和动漫部分连锁的代码。

2.给button在右上角增加叁个按键;

缩放动漫

ZHTabBarButton.m

// 在button的seSelected方法中调用- selectedScaleAnimation:selected{ [UIView animateWithDuration:0.3 animations:^{ if  { self.imageView.transform = CGAffineTransformMakeScale; self.titleLabel.transform = CGAffineTransformMakeScale; self.titleLabel.font = [UIFont boldSystemFontOfSize:12]; } else { self.imageView.transform = CGAffineTransformIdentity; self.titleLabel.transform = CGAffineTransformIdentity; self.titleLabel.font = [UIFont systemFontOfSize:12]; } }];}

3.给button加多长按手势;

位移动漫
// ZHTabBar.m// 以动画的方式布局所有button- layoutSubviewsAnimated:animated{ // 计算每个tabBarButton的frame CGFloat w = self.bounds.size.width; CGFloat h = self.bounds.size.height; CGFloat btnX = 0; CGFloat btnW = w / self.buttons.count; CGFloat minW = w / (self.buttons.count   0.5); ZHTabBarButton *lastView = nil; for (ZHTabBarButton *subView in self.buttons) { if (_style == ZHTabBarAnimationStyleTranslation) { btnW = subView.isSelected ? minW * 1.5 : minW; } btnX = CGRectGetMaxX(lastView.frame); // 被点击的按钮宽度变大,其他变小 if  { [UIView animateWithDuration:0.3 animations:^{ subView.frame = CGRectMake(btnX, 0, btnW, h); }]; } else { subView.frame = CGRectMake(btnX, 0, btnW, h); } lastView = subView; }}// button点击事件- buttonClick:(UIButton *)button{ // 代理方法 if ([_delegate respondsToSelector:@selector(tabBar:didSelectedItemFrom:to:)]) { [_delegate tabBar:self didSelectedItemFrom:self.selectedButton.tag to:button.tag]; } _selectedButton.selected = NO; button.selected = YES; _selectedButton = button; // 每次点击按钮,重新布局 [self layoutSubviewsAnimated:YES];}

ZHTabBarButton.m

// 重写来自定义布局- layoutSubviews{ [super layoutSubviews]; CGFloat imageRatio = 0.7; CGFloat imgX = 0; CGFloat imgY = 0; CGFloat imgW = CGRectGetWidth(self.frame); CGFloat imgH = (self.isSelected || _isShowTitle) ? CGRectGetHeight(self.frame) * imageRatio : CGRectGetHeight(self.frame); self.imageView.frame = CGRectMake(imgX, imgY, imgW, imgH); CGFloat ttlY = CGRectGetHeight(self.frame) * imageRatio; CGFloat ttlW = CGRectGetWidth(self.frame); CGFloat ttlH = CGRectGetHeight(self.frame) * 0.2; if (_isShowTitle) { self.titleLabel.frame = CGRectMake(0, 0, ttlW, ttlH); } self.titleLabel.center = CGPointMake(ttlW/2.f, ttlY   ttlH/2.f); // 显隐动画 [UIView animateWithDuration:0.3 animations:^{ self.titleLabel.alpha = _isShowTitle || self.isSelected; }]; }

谢谢!

品类地址:GitHub - ZHTabBarAimation。

4.给button增多覆盖,抖动时得以阻止点击事件;

有更加好的做法,还请斧正。

// .m文件

#import "DZDeleteButton.h"

#import "UIView Extension.h" // 那些只是为着方便取宽高的叁个分拣,代码就不贴了

@interface DZDeleteButton ()

// 是不是抖动

@property (nonatomic, assign, getter=isShaking)BOOLshaking;

// 右上角的开关,

@property (nonatomic, weak) UIImageView *iconBtn;

// 隐蔽,在抖动时出现

@property (nonatomic, weak) UIView *coverView;

@end

@implementation DZDeleteButton

- (UIImageView *)iconBtn {

if(!_iconBtn) {

UIImageView *iconBtn = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"delete"]];

iconBtn.userInteractionEnabled = YES;

iconBtn.hidden = YES;

_iconBtn = iconBtn;

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(iconClick)];

[iconBtn addGestureRecognizer:tap];

[self addSubview:iconBtn];

}

return_iconBtn;

}

- (UIView *)coverView {

if(!_coverView) {

UIView *view = [[UIView alloc] init];

view.backgroundColor = [UIColor clearColor];

view.hidden = YES;

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(coverClick)];

[view addGestureRecognizer:tap];

[self addSubview:view];

_coverView = view;

}

return_coverView;

}

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if(self) {

[self addLongPressGestureRecognizer];

}

returnself;

}

- (instancetype)init

{

self = [super init];

本文由betway必威手机版发布于betway必威手机版官网,转载请注明出处:整理项目中遇到的小技巧,UITabBar点击动画

关键词: 动画 UITabBar

上一篇:betway88必威体育iOS开发技巧系列,iOS程序猿需要了

下一篇:没有了