美文网首页
iOS开发 Tips 二

iOS开发 Tips 二

作者: 霸_霸霸 | 来源:发表于2018-09-11 09:38 被阅读13次

索引

  1. iOS中的C语言结构体
  2. gesture的cancelsTouchesInView可让按钮同时触发target方法和tap手势添加的方法
  3. 让手势方法和touch方法并存
  4. 监听键盘的弹出与收起

1. iOS中的C语言结构体

在学习GPUImage的时候, 遇到一个GPUVector3, 用来表示边缘阴影GPUImageVignetteFilter的颜色, 默认的是黑色, 如何更改为自己想要的颜色?
command+右键 点进去看到是一个结构体

struct GPUVector3 {
    GLfloat one;
    GLfloat two;
    GLfloat three;
};
typedef struct GPUVector3 GPUVector3;

查一下C语言的结构体的初始化方式, 选一个, 如下
GPUVector3 gv = {1,2,3};

2. gesture的cancelsTouchesInView取消按钮的触发方法

当我自己自定义一个button的时候,我发现,gesture的cancelsTouchesInView(取消视图的触发方法)属性非常重要;

例如这一段代码:

self.button.tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(TapGestureMethod)];
[self.button addGestureRecognizer:self.tapGestureRecognizer];
[self.button addTarget:self action:@selector(touchMethod) forControlEvents:UIControlEventTouchUpInside];

当cancelsTouchesInView为YES的时候,不可以调用Button通过addTarget方法指定的点击触发的方法(touchMethod),但是可以调用执行通过手势的为该Button添加的方法(TapGestureMethod);

当cancelsTouchesInView为NO的时候,可以同时调用触发方法和手势添加的方法。

3. 让手势方法和touch方法并存

开发时, 我们会给页面加一个tapGesture以隐藏键盘或者某些自定义视图, 如果这个页面同时也有CollectionView, 那就会导致CollectionView的代理方法didSelectItemAtIndexPathtapGesture的触发方法发生冲突, 只能触发tapGesture的方法.
解决方法很简单, 通过UIGestureRecognizerDelegategestureRecognizer: shouldReceiveTouch:方法

步骤一: 让tapGesture遵循代理UIGestureRecognizerDelegate

@interface XXX<UIGestureRecognizerDelegate>

- (void)addGesture {
    UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(hideMiddleView)];
    //必须要写
    tapGesture.delegate = self;
    [self addGestureRecognizer:tapGesture];
}

步骤二: 实现gestureRecognizer: shouldReceiveTouch:方法
当点击的是collectionView的时候, 允许触发点击方法

#pragma mark UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    if (touch.view == self.collectionView) {
        return YES;
    }
    return NO;
}

4. 监听键盘的弹出与收起

1. 添加监听
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHiden:) name:UIKeyboardWillHideNotification object:nil];

UIKeyboardWillShowNotification 和 UIKeyboardWillHideNotification是系统为我们设定好的, 直接使用即可.

2. 实现触发的方法

键盘出现时, 上移view

//键盘将要出现
- (void)keyboardWillShow:(NSNotification *)notification {
    NSDictionary *dic = notification.userInfo;
    //获取键盘的frame
    NSValue *value = [dic objectForKey:UIKeyboardFrameEndUserInfoKey];
    CGRect keyboardRect = [value CGRectValue];
    //获取键盘移动出现的时间
    CGFloat showDuration = [[dic objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    [UIView animateWithDuration:showDuration animations:^{
        self.view.transform = CGAffineTransformMakeTranslation(0, -CGRectGetHeight(keyboardRect));
    }];
}

键盘隐藏时, 下移view

//键盘将要隐藏
- (void)keyboardWillHiden:(NSNotification *)notification {
    NSDictionary *dic = notification.userInfo;
    //获取键盘移动出现的时间
    CGFloat showDuration = [[dic objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue];
    //通过键盘动画的时间来设定页面上下移动的时间
    [UIView animateWithDuration:showDuration animations:^{
        self.view.transform = CGAffineTransformIdentity;
    }];
}
3. 点击空白部分, 收起键盘
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    //取消第一响应者
    [self.tx resignFirstResponder];
}

这里的self.tx是textField

相关文章

  • iOS资源

    iOS开发200个tips总结(一) iOS开发200个tips总结(二) iOS中NSFileManager文件...

  • iOS图片推送的一些开发小Tips

    iOS图片推送的一些开发小Tips iOS图片推送的一些开发小Tips

  • iOS开发 Tips 二

    索引 iOS中的C语言结构体 gesture的cancelsTouchesInView可让按钮同时触发target...

  • iOS 开发 Button文字对齐

    iOS开发button常用设置 tips:无用设置

  • iOS 开发中的Tips

    iOS Tips 这里将记录iOS开发中的技巧,不定期更新内容 reloadData 调用 reloadData ...

  • iOS 开发Tips

    iOS 两行终端命令计算代码量 语法糖 字面量语法@1@[@"1", @"2"]@{@"key": @"value...

  • iOS开发Tips

    以下是我在开发过程中遇到的一些问题,虽然不多,但是每一个都是花了不少时间解决,如果有错误希望大家指正,有其他tip...

  • iOS开发Tips

    介绍 随着开发的进行,用到的一些小技巧和插件工具也越来越多。在这里统一的总结一下,方便查阅,时时更新。 小技巧 一...

  • iOS开发Tips

    1.Xcode代码不提示问题解决方法 1.找到文件夹:~/Library/Developer/Xcode/Deri...

  • iOS开发tips

    1.UINavgationController 的返回按钮被自定义之后,系统的左滑pop功能就会失效。解决:在控制...

网友评论

      本文标题:iOS开发 Tips 二

      本文链接:https://www.haomeiwen.com/subject/mhuygftx.html