iOS学习八之imageView

1.合并两个图片

+ (UIImage*)mergeImage:(UIImage*)firstImage withImage:(UIImage*)secondImage {

CGImageRef firstImageRef = firstImage.CGImage;

CGFloat firstWidth = CGImageGetWidth(firstImageRef);

CGFloat firstHeight = CGImageGetHeight(firstImageRef);

CGImageRef secondImageRef = secondImage.CGImage;

CGFloat secondWidth = CGImageGetWidth(secondImageRef);

CGFloat secondHeight = CGImageGetHeight(secondImageRef);

CGSize mergedSize = CGSizeMake(MAX(firstWidth, secondWidth), MAX(firstHeight, secondHeight));

UIGraphicsBeginImageContext(mergedSize);

[firstImage drawInRect:CGRectMake(0, 0, firstWidth, firstHeight)];

[secondImage drawInRect:CGRectMake(0, 0, secondWidth, secondHeight)];

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return image;

}

2.根据bundle中的图片名创建imageview

+ (id)imageViewWithImageNamed:(NSString*)imageName


{

return [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];

}

3.为imageView添加倒影

CGRect frame = self.frame;

frame.origin.y += (frame.size.height + 1);

UIImageView *reflectionImageView = [[UIImageView alloc] initWithFrame:frame];

self.clipsToBounds = TRUE;

reflectionImageView.contentMode = self.contentMode;

[reflectionImageView setImage:self.image];

reflectionImageView.transform = CGAffineTransformMakeScale(1.0, -1.0);

CALayer *reflectionLayer = [reflectionImageView layer];

CAGradientLayer *gradientLayer = [CAGradientLayer layer];

gradientLayer.bounds = reflectionLayer.bounds;

gradientLayer.position = CGPointMake(reflectionLayer.bounds.size.width / 2, reflectionLayer.bounds.size.height * 0.5);

gradientLayer.colors = [NSArray arrayWithObjects:

(id)[[UIColor clearColor] CGColor],

(id)[[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.3] CGColor], nil];

gradientLayer.startPoint = CGPointMake(0.5,0.5);

gradientLayer.endPoint = CGPointMake(0.5,1.0);

reflectionLayer.mask = gradientLayer;

[self.superview addSubview:reflectionImageView];

4.画水印

// 画水印

- (void) setImage:(UIImage *)image withWaterMark:(UIImage *)mark inRect:(CGRect)rect

{

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0)

{

UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);

}

//原图

[image drawInRect:self.bounds];

//水印图

[mark drawInRect:rect];

UIImage *newPic = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

self.image = newPic;

}

5.让label的文字内容显示在左上/右上/左下/右下/中心顶/中心底部

自定义UILabel

// 重写label的textRectForBounds方法

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {

CGRect rect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];

switch (self.textAlignmentType) {

case WZBTextAlignmentTypeLeftTop: {

rect.origin = bounds.origin;

}

break;

case WZBTextAlignmentTypeRightTop: {

rect.origin = CGPointMake(CGRectGetMaxX(bounds) - rect.size.width, bounds.origin.y);

}

break;

case WZBTextAlignmentTypeLeftBottom: {

rect.origin = CGPointMake(bounds.origin.x, CGRectGetMaxY(bounds) - re

ct.size.height);

}

break;

case WZBTextAlignmentTypeRightBottom: {

rect.origin = CGPointMake(CGRectGetMaxX(bounds) - rect.size.width, CG

RectGetMaxY(bounds) - rect.size.height);

}

break;

case WZBTextAlignmentTypeTopCenter: {

rect.origin = CGPointMake((CGRectGetWidth(bounds) - CGRectGetWidth(re

ct)) / 2, CGRectGetMaxY(bounds) - rect.origin.y);

}

break;

case WZBTextAlignmentTypeBottomCenter: {

rect.origin = CGPointMake((CGRectGetWidth(bounds) - CGRectGetWidth(re

ct)) / 2, CGRectGetMaxY(bounds) - CGRectGetMaxY(bounds) - rect.size.height);

}

break;

case WZBTextAlignmentTypeLeft: {

rect.origin = CGPointMake(0, rect.origin.y);

}

break;

case WZBTextAlignmentTypeRight: {

rect.origin = CGPointMake(rect.origin.x, 0);

}

break;

case WZBTextAlignmentTypeCenter: {

rect.origin = CGPointMake((CGRectGetWidth(bounds) - CGRectGetWidth(re

ct)) / 2, (CGRectGetHeight(bounds) - CGRectGetHeight(rect)) / 2);

}

break;

default:

break;

}

return rect;

}

- (void)drawTextInRect:(CGRect)rect {

CGRect textRect = [self textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];

[super drawTextInRect:textRect];

}

6.scrollView上的输入框,键盘挡住的问题

推荐用IQKeyboardManager这个框架!

手动解决如下

1、监听键盘弹出/消失的通知

2、在通知中加入代码:

NSDictionary* info = [aNotification userInfo];

CGRect keyPadFrame=[[UIApplication sharedApplication].keyWindow convertRect:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] fromView:self.view];

CGSize kbSize =keyPadFrame.size;

CGRect activeRect=[self.view convertRect:activeField.frame fromView:activeField.superview];

CGRect aRect = self.view.bounds;

aRect.size.height -= (kbSize.height);

CGPoint origin =  activeRect.origin;

origin.y -= backScrollView.contentOffset.y;

if (!CGRectContainsPoint(aRect, origin)) {

CGPoint scrollPoint = CGPointMake(0.0,CGRectGetMaxY(activeRect)-(aRect.size.height));

[backScrollView setContentOffset:scrollPoint animated:YES];

}

7.、frame布局的cell动态高度

这种通常在你的模型中添加一个辅助属性cellHeight,在模型中重写这个属性的get方法,根据你的布局和模型中的其他属性值计算出总高度。最后在tableView:heightForRow方法中,根据indexPath找出对应的模型,返回这个高度即可。

8.、AutoLayout布局的cell动态高度

// 1、设置tableView的属性

self.tableView.rowHeight = UITableViewAutomaticDimension;

self.tableView.estimatedRowHeight = 44.0; // 这个属性非0,估计cell高度

// 2、至上而下设置cell的约束,注意,上下左右最好都要顶到cell的四周


iOS学习八之imageView_第1张图片

9.使用performSelector:调用函数,内存泄漏问题

当我们在开发中使用[obj performSelector:NSSelectorFromString(@"aMethod")];

这类方法时可能会收到一个警告"performSelector may cause a leak because its selector is unknown".

是因为编译器不清楚这个对象能不能相应这个方法,如果不能,则是不安全的,而且编译器也不清楚该怎么处理这个方法的返回值!

使用以下代码调用即可:

if (! obj) { return; }

SEL selector = NSSelectorFromString(@"aMethod");

IMP imp = [obj methodForSelector:selector];

void (*func)(id, SEL) = (void *)imp;

func(obj, selector);

或者:

SEL selector = NSSelectorFromString(@"aMethod");

((void (*)(id, SEL))[obj methodForSelector:selector])(obj, selector);

10.一个字符串是否包含另一个字符串

// 方法1

if ([str1 containsString:str2]) {

NSLog(@"str1包含str2");

} else {

NSLog(@"str1不包含str2");

}

// 方法2

if ([str1 rangeOfString: str2].location == NSNotFound) {

NSLog(@"str1不包含str2");

} else {

NSLog(@"str1包含str2");

}

你可能感兴趣的:(iOS学习八之imageView)