美文网首页
iOS 10.19 日记

iOS 10.19 日记

作者: Maj_sunshine | 来源:发表于2017-10-19 14:59 被阅读2次

项目中遇到的问题

1 push到一个新的控制器,页面类似新闻文章,用UITextView控件来初始化放置内容,第一次push的时候会发生卡顿,后面再push则一切正常。

解决办法 : 在首页界面viewDidLoad中添加代码

UITextView * textView = [[UITextView alloc]initWithFrame:CGRectZero];
    [self.view addSubview:textView];

还不是从根本解决问题本质,希望能找到更好的方法。

  1. oc项目中手势和系统菜单控制器的应用。
    在开发中我们常用的手势一般有捏合 、点击、 长按、旋转、滑动,清扫几种,项目中刚好用到几种来分享记录下。
    我抽了一点出来,这界面就录了一半进来。尴尬了。


    文字正常.gif
  • 点击手势 ,这个手势太常用了
/*! 点击 */
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)];
    [textView addGestureRecognizer:tap];
  • 长按手势,项目中用于长按显示菜单控制器
 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPress:)];
        longPress.delegate =self;
        [self addGestureRecognizer:longPress];

设置代理是来解决长按和单击手势的冲突,遵循UIGestureRecognizerDelegate代理

- (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*) otherGestureRecognizer{
    NSLog(@"%@", NSStringFromClass([otherGestureRecognizer class]));
    if([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]] && [NSStringFromClass([otherGestureRecognizer class])isEqualToString:@"UITapGestureRecognizer"]){
        return NO;
    }
    return YES;
}

长按事件,使用菜单控制器

- (void)longPress:(UILongPressGestureRecognizer *)gestureRecognizer{
    tag = gestureRecognizer.view.tag;
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
        [gestureRecognizer.view becomeFirstResponder];
        UIMenuController *menu = [UIMenuController sharedMenuController];
        UIMenuItem *item1 = [[UIMenuItem alloc]initWithTitle:@"居左" action:@selector(left:)];
        UIMenuItem *item2 = [[UIMenuItem alloc]initWithTitle:@"居中" action:@selector(center:)];
        UIMenuItem *item3 = [[UIMenuItem alloc]initWithTitle:@"居右" action:@selector(right:)];
         UIMenuItem *item4 = [[UIMenuItem alloc]initWithTitle:@"删除" action:@selector(myDelete:)];
        menu.menuItems =@[item1,item2,item3,item4];
//菜单控制器的显示位置
        [menu setTargetRect:gestureRecognizer.view.bounds inView:gestureRecognizer.view];
        [menu setMenuVisible:YES animated:YES];
    }
}
  • 平移手势
/*! 平移 */
 UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(pan:)];
[textView addGestureRecognizer:panGes];


- (void)pan:(UIPanGestureRecognizer *)gestureRecognizer{
    
    if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
            gestureRecognizer.view.layer.borderColor = [UIColor blackColor].CGColor;
            gestureRecognizer.view.layer.borderWidth = 1;
    }if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
            gestureRecognizer.view.layer.borderWidth = 0;
    }
    /*! 获取拖拽的偏移值 */
    CGPoint point = [gestureRecognizer translationInView:self.view];
    /*! 改变textview中心点  只允许上下滑动*/
    gestureRecognizer.view.center = CGPointMake(gestureRecognizer.view.center.x+point.x, gestureRecognizer.view.center.y+point.y);
    /*! 手势增量置为零*/
    [gestureRecognizer setTranslation:CGPointMake(0, 0) inView:self.view];
}
  • 旋转手势
/*! 旋转 */
    UIRotationGestureRecognizer *rota = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotation:)];
 [textView addGestureRecognizer:rota];

/*! 旋转 */
- (void)rotation:(UIRotationGestureRecognizer *)gestureRecognizer{
    //通过transform 进行旋转变换
    _textView.transform = CGAffineTransformRotate(_textView.transform, gestureRecognizer.rotation);
    //将旋转角度 置为 0
    gestureRecognizer.rotation = 0;
}
  • 缩放手势
/*! 缩放 */
    UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinch:)];
[textView addGestureRecognizer:pinch];


/*! 缩放 捏合手势*/
- (void)pinch:(UIPinchGestureRecognizer *)gestureRecognizer{

    _currentScale = gestureRecognizer.scale * _currentScale;
    /*! 开始缩放 */
    if (gestureRecognizer.state ==UIGestureRecognizerStateBegan) {
        gestureRecognizer.view.layer.borderColor = [UIColor whiteColor].CGColor;
        gestureRecognizer.view.layer.borderWidth = 1;
    }
    if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {
        _textView.font = [UIFont systemFontOfSize:17+(_currentScale-1)*20];
        CGSize size ;
        size = [_textView.text boundingRectWithSize:CGSizeMake(kScreenWidth-40, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName :_textView.font } context:nil].size;
        _textView.bounds = CGRectMake(0, 0,size.width+20, size.height+20);
    }
    if (gestureRecognizer.state==UIGestureRecognizerStateEnded) {
        gestureRecognizer.view.layer.borderWidth = 0;
    }
    //设置比例 为 1 。下次在这个scale基础上改变
    gestureRecognizer.scale = 1;
    
}

这里要注意的是,网上的博客上很多简单介绍使用是下面这样

//缩放
-(void)doPinch:(UIPinchGestureRecognizer *)sender{
imageView.transform = CGAffineTransformScale(imageView.transform, sender.scale, sender.scale);
sender.scale = 1;
}

但是这样写会导致文字或者图像的失真,变得模糊。
像这样

文字模糊.gif

正常情况

文字正常.gif
  • 菜单控制器
    注意事项 :
  1. 需要自定义控件并实现下面两个方法.
//是否可以成为第一相应

-(BOOL)canBecomeFirstResponder{

    return YES;
}
//是否可以接收某些菜单的某些交互操作

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{

        return YES;
}

2 代码将控件设置第一响应者

[self becomeFirstResponder];

3 设置管理控制器的位置和显示

//设置菜单显示的位置 frame  inView设置其所在的视图
[menu setTargetRect:gestureRecognizer.view.bounds inView:gestureRecognizer.view];
//将菜单控件设置为可见
[menu setMenuVisible:YES animated:YES];

结束后就可以正确显示 。
测试小demo demo

学习到的新东西

  1. 给按钮添加block属性
  2. 关联对象的key平常都是static const void *buttonKey = @"buttonKey"; 当成一个类型常量来写。 现在发现可以直接使用@selector()方式来当作key,简单方便不会忘记.
- (ZDButton_block)ZDButton_block{
    return  objc_getAssociatedObject(self, @selector(ZDButton_block));
}


- (void)setZDButton_block:(ZDButton_block)ZDButton_block{
    objc_setAssociatedObject(self, @selector(ZDButton_block), ZDButton_block, OBJC_ASSOCIATION_COPY);
}

相关文章

  • iOS 10.19 日记

    项目中遇到的问题 1 push到一个新的控制器,页面类似新闻文章,用UITextView控件来初始化放置内容,第一...

  • 🌞感恩日记10.19

    1、感恩早晨醒来精神饱满 2、感恩早晨的温开水,水果,感恩电力太阳带来能量和光明 3、感恩林老师早晨的分享,感恩包...

  • 【考研日记】10.19

    昨天的日记写好了一直发不出去,说网络错误。然后我就关掉了,今晚才想起来发。 今天一起在考研班的同学跟我吐苦水,说快...

  • 亲子日记10.19

    今天晚不小心睡过头了起了15分钟,嘿嘿!不过我和雅宝快速洗漱,吃饭,到学校刚刚好!在路上还讨论昨晚数学测试题!中午...

  • 感恩日记10.19

    1.感恩老同事给我分享她的私房定制小笼包,丰富儿子的营养早餐 2.感恩先生今天下午没有去陪朋友喝茶,因为我身体不适...

  • 10.19感恩日记。

    1.感恩宇宙天地万物的滋养,谢谢,谢谢,谢谢! 2.感恩父母养育之恩,谢谢,谢谢,谢谢。我会用我的幸福来报答你们。...

  • 10.19觉察日记

    10.19觉察日记: 事件:想到八宝粥,出商店门后发现时间2019.07,返回去退,售货员说,保质期36个月,没过...

  • 10.19感恩日记

    1、慷慨:公益捐款。赞叹同学为疫情的付出。 2、持戒:坚持读书、坚持每天5点半起床、整理房间、打扫卫生、洗衣服、消...

  • 打卡

    10.19,05:30

  • 10.19日记

    今天股市低开高走,大涨100点,将昨天的阴线全部吃掉了。普涨行情。 定投的股今天开盘加倍补了仓。 期货: 夜...

网友评论

      本文标题:iOS 10.19 日记

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