• 子控件超出父控件响应


    // 事件传递给subview
    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    {
       CGPoint subviewP = [self convertPoint:point toView:_subview];
        
        if ([_subview pointInside:subviewP withEvent:event]) {
            return _subview;
        }else
        {
            return [super hitTest:point withEvent:event];
        }
    }
    
    // 手指移动
    - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [touches anyObject];
        
        CGPoint location =  [touch locationInView:self];
        
        CGPoint pre = [touch previousLocationInView:self];
        
        CGFloat offsetX = location.x - pre.x;
        CGFloat offsetY = location.y - pre.y;
        
        CGPoint center = self.center;
        center.x += offsetX;
        center.y += offsetY;
        
        self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY); 
    }

     

    //
    //  TeButton.m
    //  tesg
    //
    //  Created by apollo on 15/5/21.
    //  Copyright (c) 2015年 apollo. All rights reserved.
    //
    
    #import "EvaluationButton.h"
    @interface EvaluationButton()
    {
        UILabel *_label;
    }
    @end
    @implementation EvaluationButton
    
    - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
    {
        CGPoint subviewP = [self convertPoint:point toView:_label];
        
        if ([_label pointInside:subviewP withEvent:event]) {
            
            return self;
            
        }else
        {
            return [super hitTest:point withEvent:event];
        }
    }
    
    - (void)layoutSubviews
    
    {
        [super layoutSubviews];
        
            for (UIView *view in self.subviews) {
                if ([view isKindOfClass:[UILabel class]]) {
                    _label = (UILabel *)view;
                    view.frame = CGRectMake(view.frame.origin.x + 5, 0, view.frame.size.width + 15, self.frame.size.height - 10);
                    view.backgroundColor = [UIColor clearColor];
                    if (self.isSelected) {
                        [self setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
                        if ([self.currentTitle isEqualToString:@"好评"])
                        {
                            view.backgroundColor = [self colorWithHexString:@"F4C745"];
                        }
                        else if ([self.currentTitle isEqualToString:@"中评"])
                        {
                            view.backgroundColor = [self colorWithHexString:@"#77CDFE"];
                        }
                        else if ([self.currentTitle isEqualToString:@"差评"])
                        {
                            view.backgroundColor = [self colorWithHexString:@"FB5551"];
                        }
                    }
                    UILabel *label = (UILabel *)view;
                    label.textAlignment = NSTextAlignmentCenter;
                    for (UIView *view2 in self.subviews) {
                        if ([view2 isKindOfClass:[UIImageView class]]) {
                            UIImageView *image = (UIImageView *)view2;
                            label.center = CGPointMake(image.frame.size.width - 5 + label.frame.size.width * 0.5 + 5, self.frame.size.height * 0.5);
                        }
                    }
                    if (self.isSelected) {
                        
                        CALayer *layer = label.layer;
                        layer.cornerRadius = label.frame.size.height * 0.5 - 2;
                        layer.masksToBounds = YES;
                    }
                }
            }
    
    
    }
    - (void)setHighlighted:(BOOL)highlighted
    {
        
    }
    - (UIColor *) colorWithHexString: (NSString *) hexString {
        NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString];
        CGFloat alpha, red, blue, green;
        switch ([colorString length]) {
            case 3: // #RGB
                alpha = 1.0f;
                red   = [self colorComponentFrom: colorString start: 0 length: 1];
                green = [self colorComponentFrom: colorString start: 1 length: 1];
                blue  = [self colorComponentFrom: colorString start: 2 length: 1];
                break;
            case 4: // #ARGB
                alpha = [self colorComponentFrom: colorString start: 0 length: 1];
                red   = [self colorComponentFrom: colorString start: 1 length: 1];
                green = [self colorComponentFrom: colorString start: 2 length: 1];
                blue  = [self colorComponentFrom: colorString start: 3 length: 1];
                break;
            case 6: // #RRGGBB
                alpha = 1.0f;
                red   = [self colorComponentFrom: colorString start: 0 length: 2];
                green = [self colorComponentFrom: colorString start: 2 length: 2];
                blue  = [self colorComponentFrom: colorString start: 4 length: 2];
                break;
            case 8: // #AARRGGBB
                alpha = [self colorComponentFrom: colorString start: 0 length: 2];
                red   = [self colorComponentFrom: colorString start: 2 length: 2];
                green = [self colorComponentFrom: colorString start: 4 length: 2];
                blue  = [self colorComponentFrom: colorString start: 6 length: 2];
                break;
            default:
                [NSException raise:@"Invalid color value" format: @"Color value %@ is invalid.  It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB", hexString];
                break;
        }
        return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
    }
    - (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length {
        NSString *substring = [string substringWithRange: NSMakeRange(start, length)];
        NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
        unsigned hexComponent;
        [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
        return hexComponent / 255.0;
    }
    @end
    View Code
  • 相关阅读:
    Android&Handler2
    ACM&数字阶梯求和(大数问题)
    Android&MyThread
    【转】 《基于MFC的OpenGL编程》Part 15 Selection
    【转】 《基于MFC的OpenGL编程》Part 12 Creating and Using Display Lists
    【转】《基于MFC的OpenGL编程》Part 16 Reflection
    【转】 《基于MFC的OpenGL编程》Part 8 Colors
    【转】 《基于MFC的OpenGL编程》Part 14 Quadrics
    开发不同语言版本的C#程序
    基于ADS40的线阵摄影测量及数据处理
  • 原文地址:https://www.cnblogs.com/songxing10000/p/4520615.html
Copyright © 2020-2023  润新知