mirror of
https://github.com/danog/Telegram.git
synced 2024-12-04 10:27:46 +01:00
649 lines
18 KiB
Objective-C
649 lines
18 KiB
Objective-C
#import "TGToolbarButton.h"
|
|
|
|
#import "TGImageUtils.h"
|
|
|
|
static UIImage *backgroundBack()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"BackButton.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundBackPressed()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"BackButton_Pressed.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundBackLandscape()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"BackButton_Landscape.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundBackLandscapePressed()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"BackButton_Landscape_Pressed.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundGeneric()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"HeaderButton.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundGenericPressed()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"HeaderButton_Pressed.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundGenericLandscape()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"HeaderButton_Landscape.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundGenericPressedLandscape()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"HeaderButton_Landscape_Pressed.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDone()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Blue.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDonePressed()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Blue_Pressed.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDoneLandscape()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Blue_Landscape.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDoneLandscapePressed()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Blue_Landscape_Pressed.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDoneBlack()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Login_Blue.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDoneBlackPressed()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Login_Blue_Pressed.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDoneBlackLandscape()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Login_Blue_Landscape.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDoneBlackLandscapePressed()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
{
|
|
UIImage *rawImage = [UIImage imageNamed:@"HeaderButton_Login_Blue_Landscape_Pressed.png"];
|
|
image = [rawImage stretchableImageWithLeftCapWidth:(int)(rawImage.size.width / 2) topCapHeight:0];
|
|
}
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDelete()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"Header_Button_Delete.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIImage *backgroundDeleteLandscape()
|
|
{
|
|
static UIImage *image = nil;
|
|
if (image == nil)
|
|
image = [[UIImage imageNamed:@"Header_Button_Delete.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:0];
|
|
return image;
|
|
}
|
|
|
|
static UIColor *textColorForButton(int type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case TGToolbarButtonTypeDone:
|
|
case TGToolbarButtonTypeDoneBlack:
|
|
{
|
|
break;
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return [UIColor whiteColor];
|
|
}
|
|
|
|
static UIColor *shadowColorForButton(int type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case TGToolbarButtonTypeDone:
|
|
case TGToolbarButtonTypeDoneBlack:
|
|
{
|
|
return UIColorRGBA(0x042651, 0.3f);
|
|
}
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return UIColorRGBA(0x0e284d, 0.4f);
|
|
}
|
|
|
|
@interface TGToolbarButton ()
|
|
{
|
|
NSString *_text;
|
|
UIImage *_image;
|
|
UIImage *_imageLandscape;
|
|
UIImage *_imageHighlighted;
|
|
}
|
|
|
|
@property (nonatomic) bool landscapeInitialized;
|
|
|
|
@property (nonatomic, strong) UIImage *customImageNormal;
|
|
@property (nonatomic, strong) UIImage *customImageNormalHighlighted;
|
|
@property (nonatomic, strong) UIImage *customImageLandscape;
|
|
@property (nonatomic, strong) UIImage *customImageLandscapeHighlighted;
|
|
|
|
@property (nonatomic, strong) UIColor *customTextColor;
|
|
@property (nonatomic, strong) UIColor *customShadowColor;
|
|
|
|
@end
|
|
|
|
@implementation TGToolbarButton
|
|
|
|
@synthesize type = _type;
|
|
|
|
@synthesize touchInset = _touchInset;
|
|
|
|
@synthesize minWidth = _minWidth;
|
|
@synthesize paddingLeft = _paddingLeft;
|
|
@synthesize paddingRight = _paddingRight;
|
|
|
|
@synthesize landscapeOffset = _landscapeOffset;
|
|
|
|
@synthesize buttonLabelView = _buttonLabelView;
|
|
@synthesize buttonImageView = _buttonImageView;
|
|
|
|
@synthesize landscapeInitialized = _landscapeInitialized;
|
|
|
|
@synthesize isLandscape = _isLandscape;
|
|
|
|
@synthesize customImageNormal = _customImageNormal;
|
|
@synthesize customImageNormalHighlighted = _customImageNormalHighlighted;
|
|
@synthesize customImageLandscape = _customImageLandscape;
|
|
@synthesize customImageLandscapeHighlighted = _customImageLandscapeHighlighted;
|
|
|
|
@synthesize customTextColor = _customTextColor;
|
|
@synthesize customShadowColor = _customShadowColor;
|
|
|
|
@synthesize backSemantics = _backSemantics;
|
|
|
|
- (id)initWithType:(TGToolbarButtonType)type
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
_type = type;
|
|
|
|
_touchInset = CGSizeMake(8, 8);
|
|
|
|
_minWidth = 0;
|
|
_paddingLeft = 7;
|
|
_paddingRight = 7;
|
|
|
|
self.exclusiveTouch = true;
|
|
|
|
if (type == TGToolbarButtonTypeBack)
|
|
{
|
|
_paddingLeft = 15;
|
|
_paddingRight = 9;
|
|
}
|
|
|
|
_isLandscape = false;
|
|
_landscapeInitialized = false;
|
|
|
|
_buttonLabelView = [[UILabel alloc] init];
|
|
_buttonLabelView.font = [UIFont boldSystemFontOfSize:12];
|
|
_buttonLabelView.textColor = textColorForButton(type);
|
|
_buttonLabelView.shadowColor = shadowColorForButton(type);
|
|
_buttonLabelView.shadowOffset = CGSizeMake(0, -1);
|
|
_buttonLabelView.backgroundColor = [UIColor clearColor];
|
|
[self addSubview:_buttonLabelView];
|
|
|
|
_buttonImageView = [[UIImageView alloc] init];
|
|
[self addSubview:_buttonImageView];
|
|
self.text = @"";
|
|
self.image = nil;
|
|
|
|
_landscapeOffset = 0;
|
|
|
|
self.adjustsImageWhenDisabled = false;
|
|
self.adjustsImageWhenHighlighted = false;
|
|
self.enabled = true;
|
|
|
|
[self updateBackground];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (id)initWithCustomImages:(UIImage *)imageNormal imageNormalHighlighted:(UIImage *)imageNormalHighlighted imageLandscape:(UIImage *)imageLandscape imageLandscapeHighlighted:(UIImage *)imageLandscapeHighlighted textColor:(UIColor *)textColor shadowColor:(UIColor *)shadowColor
|
|
{
|
|
self = [super init];
|
|
if (self != nil)
|
|
{
|
|
_type = TGToolbarButtonTypeCustom;
|
|
|
|
_touchInset = CGSizeMake(8, 8);
|
|
|
|
_minWidth = 0;
|
|
_paddingLeft = 7;
|
|
_paddingRight = 7;
|
|
|
|
self.exclusiveTouch = true;
|
|
|
|
_isLandscape = false;
|
|
_landscapeInitialized = false;
|
|
|
|
_customTextColor = textColor;
|
|
_customShadowColor = shadowColor;
|
|
|
|
_buttonLabelView = [[UILabel alloc] init];
|
|
_buttonLabelView.font = [UIFont boldSystemFontOfSize:12];
|
|
_buttonLabelView.textColor = _customTextColor != nil ? _customTextColor : textColorForButton(TGToolbarButtonTypeGeneric);
|
|
_buttonLabelView.shadowColor = _customShadowColor != nil ? _customShadowColor : shadowColorForButton(TGToolbarButtonTypeGeneric);
|
|
_buttonLabelView.shadowOffset = CGSizeMake(0, -1);
|
|
_buttonLabelView.backgroundColor = [UIColor clearColor];
|
|
[self addSubview:_buttonLabelView];
|
|
|
|
_buttonImageView = [[UIImageView alloc] init];
|
|
[self addSubview:_buttonImageView];
|
|
self.text = @"";
|
|
self.image = nil;
|
|
|
|
_landscapeOffset = 0;
|
|
|
|
self.adjustsImageWhenDisabled = false;
|
|
self.adjustsImageWhenHighlighted = false;
|
|
self.enabled = true;
|
|
|
|
_customImageNormal = imageNormal;
|
|
_customImageNormalHighlighted = imageNormalHighlighted;
|
|
_customImageLandscape = imageLandscape;
|
|
_customImageLandscapeHighlighted = imageLandscapeHighlighted;
|
|
|
|
[self updateBackground];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (bool)backSemantics
|
|
{
|
|
return _type == TGToolbarButtonTypeBack || _backSemantics;
|
|
}
|
|
|
|
- (void)updateBackground
|
|
{
|
|
UIImage *background = nil;
|
|
UIImage *backgroundPressed = nil;
|
|
if (_type == TGToolbarButtonTypeCustom)
|
|
{
|
|
background = _isLandscape ? _customImageLandscape : _customImageNormal;
|
|
backgroundPressed = _isLandscape ? _customImageLandscapeHighlighted : _customImageNormalHighlighted;
|
|
}
|
|
else if (_type == TGToolbarButtonTypeGeneric)
|
|
{
|
|
background = _isLandscape ? backgroundGenericLandscape() : backgroundGeneric();
|
|
backgroundPressed = _isLandscape ? backgroundGenericPressedLandscape() : backgroundGenericPressed();
|
|
}
|
|
else if (_type == TGToolbarButtonTypeBack)
|
|
{
|
|
background = _isLandscape ? backgroundBackLandscape() : backgroundBack();
|
|
backgroundPressed = _isLandscape ? backgroundBackLandscapePressed() : backgroundBackPressed();
|
|
}
|
|
else if (_type == TGToolbarButtonTypeDone)
|
|
{
|
|
background = _isLandscape ? backgroundDoneLandscape() : backgroundDone();
|
|
backgroundPressed = _isLandscape ? backgroundDoneLandscapePressed() : backgroundDonePressed();
|
|
}
|
|
else if (_type == TGToolbarButtonTypeDoneBlack)
|
|
{
|
|
background = _isLandscape ? backgroundDoneBlackLandscape() : backgroundDoneBlack();
|
|
backgroundPressed = _isLandscape ? backgroundDoneBlackLandscapePressed() : backgroundDoneBlackPressed();
|
|
}
|
|
else if (_type == TGToolbarButtonTypeImage)
|
|
{
|
|
background = nil;
|
|
}
|
|
else if (_type == TGToolbarButtonTypeDelete)
|
|
{
|
|
background = _isLandscape ? backgroundDeleteLandscape() : backgroundDelete();
|
|
}
|
|
[self setBackgroundImage:background forState:UIControlStateNormal];
|
|
[self setBackgroundImage:backgroundPressed forState:UIControlStateHighlighted];
|
|
[self setBackgroundImage:backgroundPressed forState:UIControlStateHighlighted | UIControlStateSelected];
|
|
[self setBackgroundImage:backgroundPressed forState:UIControlStateSelected];
|
|
}
|
|
|
|
- (NSString *)text
|
|
{
|
|
return _text;
|
|
}
|
|
|
|
- (void)setText:(NSString *)text
|
|
{
|
|
_text = text;
|
|
|
|
if (text == nil)
|
|
{
|
|
_buttonLabelView.text = @"";
|
|
_buttonLabelView.hidden = true;
|
|
}
|
|
else
|
|
{
|
|
_buttonLabelView.text = text;
|
|
_buttonLabelView.hidden = false;
|
|
}
|
|
}
|
|
|
|
- (UIImage *)image
|
|
{
|
|
return _image;
|
|
}
|
|
|
|
- (void)setImage:(UIImage *)image
|
|
{
|
|
_image = image;
|
|
|
|
if (image == nil)
|
|
{
|
|
_buttonImageView.image = nil;
|
|
_buttonImageView.hidden = true;
|
|
}
|
|
else
|
|
{
|
|
_buttonImageView.image = image;
|
|
_buttonImageView.hidden = false;
|
|
}
|
|
}
|
|
|
|
- (UIImage *)imageLandscape
|
|
{
|
|
return _imageLandscape;
|
|
}
|
|
|
|
- (void)setImageLandscape:(UIImage *)imageLandscape
|
|
{
|
|
_imageLandscape = imageLandscape;
|
|
}
|
|
|
|
- (UIImage *)imageHighlighted
|
|
{
|
|
return _imageHighlighted;
|
|
}
|
|
|
|
- (void)setImageHighlighted:(UIImage *)image
|
|
{
|
|
_imageHighlighted = image;
|
|
|
|
if (image == nil)
|
|
{
|
|
_buttonImageView.highlightedImage = nil;
|
|
}
|
|
else
|
|
{
|
|
_buttonImageView.highlightedImage = image;
|
|
}
|
|
}
|
|
|
|
- (bool)isLandscape
|
|
{
|
|
return _isLandscape;
|
|
}
|
|
|
|
- (void)setIsLandscape:(bool)isLandscape
|
|
{
|
|
if (isLandscape != _isLandscape || !_landscapeInitialized)
|
|
{
|
|
_landscapeInitialized = true;
|
|
_isLandscape = isLandscape;
|
|
|
|
if (_image != nil && _imageLandscape != nil)
|
|
{
|
|
_buttonImageView.image = isLandscape ? _imageLandscape : _image;
|
|
[_buttonImageView sizeToFit];
|
|
}
|
|
|
|
[self layoutSubviews];
|
|
[self updateBackground];
|
|
|
|
CGRect frame = self.frame;
|
|
|
|
if ([self.superview conformsToProtocol:@protocol(TGBarItemSemantics)])
|
|
{
|
|
float offset = [(id<TGBarItemSemantics>)self.superview barButtonsOffset];
|
|
|
|
if (isLandscape)
|
|
frame.origin.y = 2 + offset;
|
|
else
|
|
frame.origin.y = 0 + offset;
|
|
}
|
|
else
|
|
{
|
|
if (isLandscape)
|
|
frame.origin.y = 3;
|
|
else
|
|
frame.origin.y = 7;
|
|
}
|
|
|
|
frame.size.height = isLandscape ? 25 : 30;
|
|
self.frame = frame;
|
|
}
|
|
}
|
|
|
|
- (void)sizeToFit
|
|
{
|
|
float width = _paddingLeft + _paddingRight;
|
|
float height = _isLandscape ? 25 : 30;
|
|
|
|
if (!_buttonLabelView.hidden)
|
|
{
|
|
[_buttonLabelView sizeToFit];
|
|
width += _buttonLabelView.frame.size.width;
|
|
}
|
|
|
|
if (_buttonImageView.image != nil)
|
|
{
|
|
CGRect frame = _buttonImageView.frame;
|
|
frame.size = _buttonImageView.image.size;
|
|
_buttonImageView.frame = frame;
|
|
width += _buttonImageView.frame.size.width;
|
|
}
|
|
|
|
if (width < _minWidth)
|
|
width = _minWidth;
|
|
|
|
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width, height);
|
|
}
|
|
|
|
- (void)layoutSubviews
|
|
{
|
|
[super layoutSubviews];
|
|
|
|
CGRect bounds = self.bounds;
|
|
|
|
CGRect labelFrame = _buttonLabelView.frame;
|
|
CGRect imageFrame = _buttonImageView.frame;
|
|
|
|
float retinaPixel = TGIsRetina() ? 0.5f : 0.0f;
|
|
|
|
int addY = _isLandscape ? 1 : 0;
|
|
int imageAddY = 0;
|
|
|
|
if (!_buttonLabelView.hidden)
|
|
{
|
|
[_buttonLabelView sizeToFit];
|
|
labelFrame = _buttonLabelView.frame;
|
|
labelFrame.origin.y = (float)((bounds.size.height - labelFrame.size.height) / 2) - (!_isLandscape ? 0 : 1.0f) - retinaPixel + addY - (_type != TGToolbarButtonTypeBack && !_isLandscape ? retinaPixel : 0.0f);
|
|
}
|
|
else
|
|
labelFrame.size = CGSizeZero;
|
|
|
|
if (!_buttonImageView.hidden && _buttonImageView.image != nil)
|
|
{
|
|
imageFrame = _buttonImageView.frame;
|
|
imageFrame.origin.y = CGFloor(((bounds.size.height - imageFrame.size.height) / 2) + imageAddY);
|
|
}
|
|
else
|
|
imageFrame.size = CGSizeZero;
|
|
|
|
int spacing = 4;
|
|
if (labelFrame.size.width == 0 || imageFrame.size.width == 0)
|
|
spacing = 0;
|
|
|
|
labelFrame.origin.x = ((bounds.size.width - _paddingLeft - _paddingRight - labelFrame.size.width - spacing - imageFrame.size.width) / 2 + _paddingLeft);
|
|
imageFrame.origin.x = (labelFrame.origin.x + labelFrame.size.width + spacing);
|
|
|
|
if (TGIsRetina())
|
|
{
|
|
labelFrame.origin.x = ((int)(labelFrame.origin.x * 2.0f)) / 2;
|
|
imageFrame.origin.x = ((int)(imageFrame.origin.x * 2.0f)) / 2;
|
|
}
|
|
else
|
|
{
|
|
labelFrame.origin.x = CGFloor(labelFrame.origin.x);
|
|
imageFrame.origin.x = CGFloor(imageFrame.origin.x);
|
|
}
|
|
|
|
if (_type == TGToolbarButtonTypeBack && _isLandscape)
|
|
labelFrame.origin.x -= 1;
|
|
|
|
_buttonLabelView.frame = labelFrame;
|
|
_buttonImageView.frame = imageFrame;
|
|
}
|
|
|
|
- (void)setEnabled:(BOOL)enabled
|
|
{
|
|
_buttonLabelView.alpha = !enabled ? 0.6f : 1.0f;
|
|
|
|
[super setEnabled:enabled];
|
|
}
|
|
|
|
- (void)setHighlighted:(BOOL)highlighted
|
|
{
|
|
//_buttonLabelView.shadowColor = shadowColorForButton(_type, highlighted || self.selected);
|
|
|
|
[super setHighlighted:highlighted];
|
|
}
|
|
|
|
- (void)setSelected:(BOOL)selected
|
|
{
|
|
//_buttonLabelView.shadowColor = shadowColorForButton(_type, selected || self.highlighted);
|
|
|
|
[super setSelected:selected];
|
|
}
|
|
|
|
- (CGRect)backgroundRectForBounds:(CGRect)bounds
|
|
{
|
|
CGRect backgroundFrame = CGRectOffset([super backgroundRectForBounds:bounds], 0, (TGIsRetina() && _isLandscape) ? 0.5f : 0.0f);
|
|
|
|
if (_type == TGToolbarButtonTypeBack)
|
|
{
|
|
backgroundFrame.origin.x -= 1;
|
|
backgroundFrame.size.width += 1;
|
|
|
|
if (!_isLandscape && TGIsRetina())
|
|
{
|
|
backgroundFrame.origin.y += 0.5f;
|
|
}
|
|
}
|
|
|
|
return backgroundFrame;
|
|
}
|
|
|
|
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)__unused event
|
|
{
|
|
if (self.alpha < FLT_EPSILON || self.hidden)
|
|
return nil;
|
|
|
|
if (CGRectContainsPoint(CGRectInset(self.bounds, -_touchInset.width, -_touchInset.height), point))
|
|
return self;
|
|
return nil;
|
|
}
|
|
|
|
@end
|