Initial commit
This commit is contained in:
+121
@@ -0,0 +1,121 @@
|
||||
//
|
||||
// AGEmojiPageView.m
|
||||
// AGEmojiKeyboard
|
||||
//
|
||||
// Created by Ayush on 09/05/13.
|
||||
// Copyright (c) 2013 Ayush. All rights reserved.
|
||||
//
|
||||
|
||||
#import "UMComEmojiPageView.h"
|
||||
|
||||
#define BACKSPACE_BUTTON_TAG 10
|
||||
#define BUTTON_FONT_SIZE 32
|
||||
|
||||
@interface UMComEmojiPageView ()
|
||||
|
||||
@property (nonatomic) CGSize buttonSize;
|
||||
@property (nonatomic) NSMutableArray *buttons;
|
||||
@property (nonatomic) NSUInteger columns;
|
||||
@property (nonatomic) NSUInteger rows;
|
||||
@property (nonatomic) UIImage *backSpaceButtonImage;
|
||||
|
||||
@end
|
||||
|
||||
@implementation UMComEmojiPageView
|
||||
|
||||
- (void)setButtonTexts:(NSMutableArray *)buttonTexts {
|
||||
|
||||
NSAssert(buttonTexts != nil, @"Array containing texts to be set on buttons is nil");
|
||||
|
||||
if (([self.buttons count] - 1) == [buttonTexts count]) {
|
||||
// just reset text on each button
|
||||
for (NSUInteger i = 0; i < [buttonTexts count]; ++i) {
|
||||
[self.buttons[i] setTitle:buttonTexts[i] forState:UIControlStateNormal];
|
||||
}
|
||||
} else {
|
||||
[self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
|
||||
self.buttons = nil;
|
||||
self.buttons = [NSMutableArray arrayWithCapacity:self.rows * self.columns];
|
||||
for (NSUInteger i = 0; i < [buttonTexts count]; ++i) {
|
||||
if (i % (self.rows *self.columns -1) == 0 && i > 0) {
|
||||
continue;
|
||||
}
|
||||
UIButton *button = [self createButtonAtIndex:i];
|
||||
[button setTitle:buttonTexts[i] forState:UIControlStateNormal];
|
||||
[self addToViewButton:button];
|
||||
}
|
||||
UIButton *button = [self createButtonAtIndex:self.rows * self.columns - 1];
|
||||
[button setContentEdgeInsets:UIEdgeInsetsMake(10, 10, 10, 10)];
|
||||
[button setImage:self.backSpaceButtonImage forState:UIControlStateNormal];
|
||||
button.tag = BACKSPACE_BUTTON_TAG;
|
||||
[self addToViewButton:button];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)addToViewButton:(UIButton *)button {
|
||||
|
||||
NSAssert(button != nil, @"Button to be added is nil");
|
||||
|
||||
[self.buttons addObject:button];
|
||||
[self addSubview:button];
|
||||
}
|
||||
|
||||
// Padding is the expected space between two buttons.
|
||||
// Thus, space of top button = padding / 2
|
||||
// extra padding according to particular button's pos = pos * padding
|
||||
// Margin includes, size of buttons in between = pos * buttonSize
|
||||
// Thus, margin = padding / 2
|
||||
// + pos * padding
|
||||
// + pos * buttonSize
|
||||
|
||||
- (CGFloat)XMarginForButtonInColumn:(NSInteger)column {
|
||||
CGFloat padding = ((CGRectGetWidth(self.bounds) - self.columns * self.buttonSize.width) / self.columns);
|
||||
return (padding / 2 + column * (padding + self.buttonSize.width));
|
||||
}
|
||||
|
||||
- (CGFloat)YMarginForButtonInRow:(NSInteger)rowNumber {
|
||||
CGFloat padding = ((CGRectGetHeight(self.bounds) - self.rows * self.buttonSize.height) / self.rows);
|
||||
return (padding / 2 + rowNumber * (padding + self.buttonSize.height));
|
||||
}
|
||||
|
||||
- (UIButton *)createButtonAtIndex:(NSUInteger)index {
|
||||
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
button.titleLabel.font = [UIFont fontWithName:@"Apple color emoji" size:BUTTON_FONT_SIZE];
|
||||
NSInteger row = (NSInteger)(index / self.columns);
|
||||
NSInteger column = (NSInteger)(index % self.columns);
|
||||
button.frame = CGRectIntegral(CGRectMake([self XMarginForButtonInColumn:column],
|
||||
[self YMarginForButtonInRow:row],
|
||||
self.buttonSize.width,
|
||||
self.buttonSize.height));
|
||||
|
||||
[button addTarget:self
|
||||
action:@selector(emojiButtonPressed:)
|
||||
forControlEvents:UIControlEventTouchUpInside];
|
||||
return button;
|
||||
}
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame
|
||||
backSpaceButtonImage:(UIImage *)backSpaceButtonImage
|
||||
buttonSize:(CGSize)buttonSize
|
||||
rows:(NSUInteger)rows
|
||||
columns:(NSUInteger)columns {
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
_backSpaceButtonImage = backSpaceButtonImage;
|
||||
_buttonSize = buttonSize;
|
||||
_columns = columns;
|
||||
_rows = rows;
|
||||
_buttons = [[NSMutableArray alloc] initWithCapacity:rows * columns];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)emojiButtonPressed:(UIButton *)button {
|
||||
if (button.tag == BACKSPACE_BUTTON_TAG) {
|
||||
[self.delegate emojiPageViewDidPressBackSpace:self];
|
||||
return;
|
||||
}
|
||||
[self.delegate emojiPageView:self didUseEmoji:button.titleLabel.text];
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user