美文网首页
initWithFrame和initWithCoder使用技巧

initWithFrame和initWithCoder使用技巧

作者: CharlyZheng | 来源:发表于2017-08-28 10:30 被阅读54次

    //
    // MJLockView.m
    // 03-手势解锁
    //
    // Created by apple on 14-4-20.
    // Copyright (c) 2014年 itcast. All rights reserved.
    //

    import "MJLockView.h"

    @implementation MJLockView
    //当你通过代码创建控件就会调用这个方法

    • (id)initWithFrame:(CGRect)frame
      {
      self = [super initWithFrame:frame];
      if (self) {
      [self setup];
      }
      return self;
      }
      //当你通过storyboared或者xib中创建控件就会调用这个方法
    • (id)initWithCoder:(NSCoder *)aDecoder
      {
      if (self = [super initWithCoder:aDecoder]) {
      [self setup];
      }
      return self;
      }

    /**
    初始化
    */

    • (void)setup
      {
      for (int index = 0; index<9; index++) {
      // 创建按钮
      UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

        btn.userInteractionEnabled = NO;
        
        btn.backgroundColor = [UIColor blueColor];
        
        // 设置默认的背景图片
        [btn setBackgroundImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];
        
        // 设置选中时的背景图片(selected)
        [btn setBackgroundImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];
        
        // 添加按钮
        [self addSubview:btn];
      

      }
      }

    // 调整按钮的frame最好在这个方法里面

    • (void)layoutSubviews
      {
      [super layoutSubviews];

      for (int index = 0; index<self.subviews.count; index++) {
      // 取出按钮
      UIButton *btn = self.subviews[index];

        // 设置frame
        CGFloat btnW = 74;
        CGFloat btnH = 74;
        
        int totalColumns = 3;
        int col = index % totalColumns;
        int row = index / totalColumns;
        CGFloat marginX = (self.frame.size.width - totalColumns * btnW) / (totalColumns + 1);
        CGFloat marginY = marginX;
        
        CGFloat btnX = marginX + col * (btnW + marginX);
        CGFloat btnY = row * (btnH + marginY);
        btn.frame = CGRectMake(btnX, btnY, btnW, btnH);
      

      }
      }

    • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
      {
      UITouch *touch = [touches anyObject];
      CGPoint pos = [touch locationInView:touch.view];

      for (UIButton *btn in self.subviews) {
      if (CGRectContainsPoint(btn.frame, pos)) {
      btn.selected = YES;
      }
      }

    }

    • (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
      {
      UITouch *touch = [touches anyObject];
      CGPoint pos = [touch locationInView:touch.view];

      for (UIButton *btn in self.subviews) {
      if (CGRectContainsPoint(btn.frame, pos)) {
      btn.selected = YES;
      }
      }
      }

    • (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
      {

    }

    • (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
      {
      [self touchesEnded:touches withEvent:event];
      }

    • (void)drawRect:(CGRect)rect
      {

    }

    @end

    相关文章

      网友评论

          本文标题: initWithFrame和initWithCoder使用技巧

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