ios 怎么加入 flanimatedios imageview 圆角

iOS 的 Gif 渲染引擎 FLAnimatedImage-b
时间: 00:04:14
&&&& 阅读:138
&&&& 评论:
&&&& 收藏:0
标签:公司的项目有个首页加载一张2M左右的git图,刚做的时候是使用的SDWebImage里面的方法:
+ (UIImage *)sd_animatedGIFNamed:(NSString *)
+ (UIImage *)sd_animatedGIFWithData:(NSData *)
使用之后发现这个方法会使内存迅速上增300M,在网上找了一些方法:
//在didReceiveMemoryWarning方法中释放SDImage的缓存即可!
- (void)didReceiveMemoryWarning {
& & & &[superdidReceiveMemoryWarning];
& &// Dispose of & & any resources that can be recreated.
& & & &[[SDWebImageManagersharedManager]cancelAll];
& & & &[[SDImageCachesharedImageCache]clearDisk];
但是使用之后发现效果并不明显,于是使用了这个FLAnimatedImage
FLAnimatedImage 是 iOS 的一个渲染 Gif 动画的引擎。
可同时播放多个 Gif
&动画,速度媲美桌面浏览器
可变帧延迟
内存占用小
可在第一次循环播放时消除或者阻止延迟
动画的帧延迟解析性能媲美浏览器
示例代码:
FLAnimatedImage *image = [FLAnimatedImage animatedImageWithGIFData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif"]]]; FLAnimatedImageView *imageView = [[FLAnimatedImageView alloc] init]; imageView.animatedImage = imageView.frame = CGRectMake(0.0, 0.0, 100.0, 100.0); [self.view addSubview:imageView];
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!iOS开发经验总结(二) - 风铃的翼的博客 - CSDN博客
iOS开发经验总结(二)
1、设置UILabel行间距
NSMutableAttributedString* attrString = [[NSMutableAttributedString
alloc] initWithString:label.text];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineSpacing:20];
[attrString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, label.text.length)];
label.attributedText = attrS
// 或者使用xib,看下gif图
Untitled.gif
2、当使用-performSelector:withObject:withObject:afterDelay:方法时,需要传入多参数问题
// 方法一、
// 把参数放进一个数组/字典,直接把数组/字典当成一个参数传过去,具体方法实现的地方再解析这个数组/字典
NSArray * array =
[NSArray arrayWithObjects: @”first”, @”second”, nil];
[self performSelector:@selector(fooFirstInput:) withObject: array afterDelay:15.0];
// 方法二、
// 使用NSInvocation
SEL aSelector = NSSelectorFromString(@”doSoming:argument2:”);
NSInteger argument1 = 10;
NSString *argument2 = @”argument2”;
if([self respondsToSelector:aSelector]) {
NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:aSelector]];
[inv setSelector:aSelector];
[inv setTarget:self];
[inv setArgument:&(argument1) atIndex:2];
[inv setArgument:&(argument2) atIndex:3];
[inv performSelector:@selector(invoke) withObject:nil afterDelay:15.0];
3、UILabel显示不同颜色字体
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:label.text];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
label.attributedText =
4、比较两个CGRect/CGSize/CGPoint是否相等
if (CGRectEqualToRect(rect1, rect2)) { // 两个区域相等
// do some
if (CGPointEqualToPoint(point1, point2)) { // 两个点相等
// do some
if (CGSizeEqualToSize(size1, size2)) { // 两个size相等
// do some
5、比较两个NSDate相差多少小时
NSDate* date1 = someD
NSDate* date2 = someOtherD
NSTimeInterval distanceBetweenDates = [date1 timeIntervalSinceDate:date2];
double secondsInAnHour = 3600;
// 除以3600是把秒化成小时,除以60得到结果为相差的分钟数
NSInteger hoursBetweenDates = distanceBetweenDates / secondsInAnH
6、每个cell之间增加间距
// 方法一,每个分区只显示一行cell,分区头当作你想要的间距(注意,从数据源数组中取值的时候需要用indexPath.section而不是indexPath.row)
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
return yourArry.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
return cellSpacingH
// 方法二,在cell的contentView上加个稍微低一点的view,cell上原本的内容放在你的view上,而不是contentView上,这样能伪造出一个间距来。
// 方法三,自定义cell,重写setFrame:方法
- (void)setFrame:(CGRect)frame
frame.size.height -= 20;
[super setFrame:frame];
7、播放一张张连续的图片
// 加入现在有三张图片分别为animate_1、animate_2、animate_3
imageView.animationImages = @[[UIImage imageNamed:@”animate_1”], [UIImage imageNamed:@”animate_2”], [UIImage imageNamed:@”animate_3”]];
imageView.animationDuration = 1.0;
imageView.image = [UIImage animatedImageNamed:@”animate_” duration:1.0];
// 方法二解释下,这个方法会加载animate_为前缀的,后边0-1024,也就是animate_0、animate_1一直到animate_1024
8、加载gif图片
推荐使用这个框架 FLAnimatedImage
9、防止离屏渲染为image添加圆角
// image分类
- (UIImage *)circleImage
// NO代表透明
UIGraphicsBeginImageContextWithOptions(self.size, NO, 1);
// 获得上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 添加一个圆
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
// 方形变圆形
CGContextAddEllipseInRect(ctx, rect);
CGContextClip(ctx);
// 将图片画上去
[self drawInRect:rect];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
10、查看系统所有字体
// 打印字体
for (id familyName in [UIFont familyNames]) {
NSLog(@”%@”, familyName);
for (id fontName in [UIFont fontNamesForFamilyName:familyName]) NSLog(@”
%@”, fontName);
// 也可以进入这个网址查看
11、获取随机数
NSInteger i = arc4random();
12、获取随机数小数(0-1之间)
define ARC4RANDOM_MAX
double val = ((double)arc4random() / ARC4RANDOM_MAX);
13、AVPlayer视频播放完成的通知监听
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(videoPlayEnd)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
14、判断两个rect是否有交叉
if (CGRectIntersectsRect(rect1, rect2)) {
15、判断一个字符串是否为数字
NSCharacterSet *notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([str rangeOfCharacterFromSet:notDigits].location == NSNotFound)
// 不是数字
16、将一个view保存为pdf格式
(void)createPDFfromUIView:(UIView*)aView saveToDocumentsWithFileName:(NSString*)aFilename
NSMutableData *pdfData = [NSMutableData data];
UIGraphicsBeginPDFContextToData(pdfData, aView.bounds, nil);
UIGraphicsBeginPDFPage();
CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[aView.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
NSArray* documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString* documentDirectory = [documentDirectories objectAtIndex:0];
NSString* documentDirectoryFilename = [documentDirectory stringByAppendingPathComponent:aFilename];
[pdfData writeToFile:documentDirectoryFilename atomically:YES];
NSLog(@”documentDirectoryFileName: %@”,documentDirectoryFilename);
17、让一个view在父视图中心
child.center = [parent convertPoint:parent.center fromView:parent.superview];
18、获取当前导航控制器下前一个控制器
(UIViewController *)backViewController
NSInteger myIndex = [self.navigationController.viewControllers indexOfObject:self];
if ( myIndex != 0 && myIndex != NSNotFound ) {
return [self.navigationController.viewControllers objectAtIndex:myIndex-1];
19、保存UIImage到本地
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@”Image.png”];
[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
20、键盘上方增加工具栏
UIToolbar *keyboardDoneButtonView = [[UIToolbar alloc] init];
[keyboardDoneButtonView sizeToFit];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@”Done”
style:UIBarButtonItemStyleBordered target:self
action:@selector(doneClicked:)];
[keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton, nil]];
txtField.inputAccessoryView = keyboardDoneButtonV
21、copy一个view
因为UIView没有实现copy协议,因此找不到copyWithZone方法,使用copy的时候导致崩溃
但是我们可以通过归档再解档实现copy,这相当于对视图进行了一次深拷贝,代码如下
id copyOfView =
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
22、在image上绘制文字并生成新的image
UIFont *font = [UIFont boldSystemFontOfSize:12];
UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0,0,image.size.width,image.size.height)];
CGRect rect = CGRectMake(point.x, point.y, image.size.width, image.size.height);
[[UIColor whiteColor] set];
[text drawInRect:CGRectIntegral(rect) withFont:font];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
23、判断一个view是否为另一个view的子视图
// 如果myView是self.view本身,也会返回yes
BOOL isSubView = [myView isDescendantOfView:self.view];
24、判断一个字符串是否包含另一个字符串
// 方法一、这种方法只适用于iOS8之后,如果是配iOS8之前用方法二
if ([str containsString:otherStr]) NSLog(@”包含”);
NSRange range = [str rangeOfString:otherStr];
if (range.location != NSNotFound) NSLog(@”包含”);
25、UICollectionView自动滚动到某行
// 重写viewDidLayoutSubviews方法
-(void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
[self.collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
26、修改系统UIAlertController
// 但是据说这种方法会被App Store拒绝(慎用!)
UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@”” message:@”” preferredStyle:UIAlertControllerStyleActionSheet];
NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@”我是一个大文本”];
[hogan addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:30]
range:NSMakeRange(4, 1)];
[hogan addAttribute:NSForegroundColorAttributeName
value:[UIColor redColor]
range:NSMakeRange(4, 1)];
[alertVC setValue:hogan forKey:@”attributedTitle”];
UIAlertAction *button = [UIAlertAction actionWithTitle:@"Label text" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ }];
UIImage *accessoryImage = [UIImage imageNamed:@"1"];
[button setValue:accessoryImage forKey:@"image"];
[alertVC addAction:button];
[self presentViewController:alertVC animated:YES completion:nil];
27、判断某一行的cell是否已经显示
CGRect cellRect = [tableView rectForRowAtIndexPath:indexPath];
BOOL completelyVisible = CGRectContainsRect(tableView.bounds, cellRect);
28、让导航控制器pop回指定的控制器
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];
for (UIViewController *aViewController in allViewControllers) {
if ([aViewController isKindOfClass:[RequiredViewController class]]) {
[self.navigationController popToViewController:aViewController animated:NO];
29、动画修改label上的文字
CATransition *animation = [CATransition animation];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.type = kCATransitionF
animation.duration = 0.75;
[self.label.layer addAnimation:animation forKey:@”kCATransitionFade”];
self.label.text = @”New”;
[UIView transitionWithView:self.label
duration:0.25f
options:UIViewAnimationOptionTransitionCrossDissolve
animations:^{
self.label.text = @"Well done!";
} completion:nil];
[UIView animateWithDuration:1.0
animations:^{
self.label.alpha = 0.0f;
self.label.text = @”newText”;
self.label.alpha = 1.0f;
30、判断字典中是否包含某个key值
if ([dic objectForKey:@”yourKey”]) {
NSLog(@”有这个值”);
NSLog(@”没有这个值”);
31、获取屏幕方向
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarO
if(orientation == 0) //Default orientation
else if(orientation == UIInterfaceOrientationPortrait)
else if(orientation == UIInterfaceOrientationLandscapeLeft)
else if(orientation == UIInterfaceOrientationLandscapeRight)
32、设置UIImage的透明度
// 方法一、添加UIImage分类
- (UIImage *)imageByApplyingAlpha:(CGFloat) alpha {
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextSetAlpha(ctx, alpha);
CGContextDrawImage(ctx, area, self.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newI
// 方法二、如果没有奇葩需求,干脆用UIImageView设置透明度
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithName:@”yourImage”]];
imageView.alpha = 0.5;
33、Attempt to mutate immutable object with insertString:atIndex:
这个错是因为你拿字符串调用insertString:atIndex:方法的时候,调用对象不是NSMutableString,应该先转成这个类型再调用
34、UIWebView添加单击手势不响应
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(webViewClick)];
tap.delegate =
[_webView addGestureRecognizer:tap];
// 因为webView本身有一个单击手势,所以再添加会造成手势冲突,从而不响应。需要绑定手势代理,并实现下边的代理方法
- (BOOL)gestureRecognizer:(UIGestureRecognizer )gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer )otherGestureRecognizer{
return YES;
35、获取手机RAM容量
// 需要导入#import
pragma clang diagnostic ignored “-Wdeprecated-declarations”**
decoded = [[self alloc] initWithBase64Encoding:[string stringByReplacingOccurrencesOfString:@"[^A-Za-z0-9+/=]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [string length])]];
#pragma clang diagnostic pop
decoded = [[self alloc] initWithBase64EncodedString:string options:NSDataBase64DecodingIgnoreUnknownCharacters];
return [decoded length]? decoded:
NSData转string
@param wrapWidth 换行长度
- (NSString *)base64EncodedStringWithWrapWidth:(NSUInteger)wrapWidth
if (![self length])
NSString *encoded =
#if __MAC_OS_X_VERSION_MIN_REQUIRED & __MAC_10_9 || __IPHONE_OS_VERSION_MIN_REQUIRED & __IPHONE_7_0
if (![NSData instancesRespondToSelector:@selector(base64EncodedStringWithOptions:)])
**#pragma clang diagnostic push
pragma clang diagnostic ignored “-Wdeprecated-declarations”**
encoded = [self base64Encoding];
#pragma clang diagnostic pop
switch (wrapWidth)
return [self base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
return [self base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
encoded = [self base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)0];
if (!wrapWidth || wrapWidth &= [encoded length])
wrapWidth = (wrapWidth / 4) * 4;
NSMutableString *result = [NSMutableString string];
for (NSUInteger i = 0; i & [encoded length]; i+= wrapWidth)
if (i + wrapWidth &= [encoded length])
[result appendString:[encoded substringFromIndex:i]];
[result appendString:[encoded substringWithRange:NSMakeRange(i, wrapWidth)]];
[result appendString:@”\r\n”];
NSData转string 换行长度默认64
- (NSString *)base64EncodedString
return [self base64EncodedStringWithWrapWidth:0];
63、AES加密
import “CALayer+BorderColor.h”
@implementation CALayer (BorderColor)
(void)setBorderUIColor:(UIColor *)color
self.borderColor = color.CGC
76、根据经纬度获取城市等信息
// 创建经纬度
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
//创建一个译码器
CLGeocoder *cLGeocoder = [[CLGeocoder alloc] init];
[cLGeocoder reverseGeocodeLocation:userLocation completionHandler:^(NSArray *placemarks, NSError *error) {
CLPlacemark *place = [placemarks objectAtIndex:0];
  NSLog(@”name,%@”,place.name);
  // 街道
  NSLog(@”thoroughfare,%@”,place.thoroughfare);
  // 子街道
  NSLog(@”subThoroughfare,%@”,place.subThoroughfare);
  NSLog(@”locality,%@”,place.locality);
  NSLog(@”subLocality,%@”,place.subLocality);
  // 国家
  NSLog(@”country,%@”,place.country);
CLPlacemark中属性含义
thoroughfare
subThoroughfare
街道相关信息,例如门牌等
subLocality
城市相关信息,例如标志性建筑
administrativeArea
subAdministrativeArea
其他行政区域信息(自治区等)
postalCode
ISOcountryCode
inlandWater
水源,湖泊
areasOfInterest
关联的或利益相关的地标
77、如何防止添加多个NSNotification观察者?
// 解决方案就是添加观察者之前先移除下这个观察者
[[NSNotificationCenter defaultCenter] removeObserver:observer name:name object:object];
[[NSNotificationCenter defaultCenter] addObserver:observer selector:selector name:name object:object];
78、将一个xib添加到另外一个xib上
// 假设你的自定义view名字为CustomView,你需要在CustomView.m中重写 - (instancetype)initWithCoder:(NSCoder *)aDecoder 方法,代码如下:
- (instancetype)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
[self addSubview:[[[NSBundle mainBundle] loadNibNamed:@”CustomView” owner:self options:nil] objectAtIndex:0]];
将一个xib添加到另外一个xib上.png
79、处理字符串,使其首字母大写
NSString *str = @"abcdefghijklmn";
NSString *resultS
if (str && str.length & 0) {
resultStr = [str stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[str substringToIndex:1] capitalizedString]];
NSLog(@"%@", resultStr);
80、判断一个UIAlertView/UIAlertController是否显示
// UIAlertView自带属性
if (alert.visible)
NSLog(@”显示了”);
NSLog(@”未显示”);
// UIAlertController没有visible属性,需要自己判断,添加一个全局变量 BOOL visible
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@”Title” message:@”message” preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction alertAction = [UIAlertAction actionWithTitle:@”ActionTitle” style:UIAlertActionStyleDefault handler:^(UIAlertAction
_Nonnull action) {
self.visible = NO;
UIAlertAction calcelAction = [UIAlertAction actionWithTitle:@”calcelTitle” style:UIAlertActionStyleCancel handler:^(UIAlertAction
_Nonnull action) {
self.visible = NO;
[alertController addAction:alertAction];
[alertController addAction:calcelAction];
[self presentViewController:alertController animated:YES completion:^{
self.visible = YES;
81、获取字符串中的数字
(NSString )getNumberFromStr:(NSString )str
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
return [[str componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@”“];
NSLog(@”%@”, [self getNumberFromStr:@”a0b0c1d2e3f4fda8fa8fad9fsad23”]); //
82、为UIView的某个方向添加边框
// 添加UIView分类
// UIView+WZB.h
import “UIView+WZB.h”
@implementation UIView (WZB)
(void)wzb_addBorder:(WZBBorderDirectionType)direction color:(UIColor *)color width:(CGFloat)width
CALayer *border = [CALayer layer];
border.backgroundColor = color.CGC
switch (direction) {
case WZBBorderDirectionTop:
border.frame = CGRectMake(0.0f, 0.0f, self.bounds.size.width, width);
case WZBBorderDirectionLeft:
border.frame = CGRectMake(0.0f, 0.0f, width, self.bounds.size.height);
case WZBBorderDirectionBottom:
border.frame = CGRectMake(0.0f, self.bounds.size.height - width, self.bounds.size.width, width);
case WZBBorderDirectionRight:
border.frame = CGRectMake(self.bounds.size.width - width, 0, width, self.bounds.size.height);
[self.layer addSublayer:border];
83、通过属性设置UISwitch、UIProgressView等控件的宽高
mySwitch.transform = CGAffineTransformMakeScale(5.0f, 5.0f);
progressView.transform = CGAffineTransformMakeScale(5.0f, 5.0f);
84、自动搜索功能,用户连续输入的时候不搜索,用户停止输入的时候自动搜索(我这里设置的是0.5s,可根据需求更改)
// 输入框文字改变的时候调用
-(void)searchBar:(UISearchBar )searchBar textDidChange:(NSString )searchText{
// 先取消调用搜索方法
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(searchNewResult) object:nil];
// 0.5秒后调用搜索方法
[self performSelector:@selector(searchNewResult) withObject:nil afterDelay:0.5];
85、修改UISearchBar的占位文字颜色
// 方法一(推荐使用)
UITextField *searchField = [searchBar valueForKey:@"_searchField"];
[searchField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"];
// 方法二(已过期)
[[UILabel appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
// 方法三(已过期)
NSDictionary *placeholderAttributes = @{NSForegroundColorAttributeName : [UIColor redColor], NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue" size:15],};
NSAttributedString *attributedPlaceholder = [[NSAttributedString alloc] initWithString:searchBar.placeholder attributes:placeholderAttributes];
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setAttributedPlaceholder:attributedPlaceholder];
86、某个界面多个事件同时响应引起的问题(比如,两个button同时按push到新界面,两个都会响应,可能导致push重叠)
// UIView有个属性叫做exclusiveTouch,设置为YES后,其响应事件会和其他view互斥(有其他view事件响应的时候点击它不起作用)
view.exclusiveTouch = YES;
// 一个一个设置太麻烦了,可以全局设置
[[UIView appearance] setExclusiveTouch:YES];
// 或者只设置button
[[UIButton appearance] setExclusiveTouch:YES];
87、修改tabBar的frame
// 子类化UITabBarViewController,我这里以修改tabBar高度为例,重写viewWillLayoutSubviews方法
import “WZBTabBarViewController.h”
@interface WZBTabBarViewController ()
@implementation WZBTabBarViewController
- (void)viewWillLayoutSubviews {
CGRect tabFrame = self.tabBar.
tabFrame.size.height = 100;
tabFrame.origin.y = self.view.frame.size.height - 100;
self.tabBar.frame = tabF
88、修改键盘背景颜色
// 设置某个键盘颜色
textField.keyboardAppearance = UIKeyboardAppearanceA
// 设置工程中所有键盘颜色
[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceAlert];
89、修改image颜色
UIImage *image = [UIImage imageNamed:@”test”];
imageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToMask(context, rect, image.CGImage);
CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImage *flippedImage = [UIImage imageWithCGImage:img.CGImage scale:1.0 orientation: UIImageOrientationDownMirrored];
imageView.image = flippedI
90、动画执行removeFromSuperview
[UIView animateWithDuration:0.2
animations:^{
view.alpha = 0.0f;
} completion:^(BOOL finished){
[view removeFromSuperview];
91、设置UIButton高亮背景颜色
[UIView animateWithDuration:0.2
animations:^{
view.alpha = 0.0f;
} completion:^(BOOL finished){
[view removeFromSuperview];
92、设置UIButton高亮时的背景颜色
// 方法一、子类化UIButton,重写setHighlighted:方法,代码如下
import “WZBButton.h”
@implementation WZBButton
(void)setHighlighted:(BOOL)highlighted {
[super setHighlighted:highlighted];
UIColor *normalColor = [UIColor greenColor];
UIColor *highlightedColor = [UIColor redColor];
self.backgroundColor = highlighted ? highlightedColor : normalC
// 方法二、利用setBackgroundImage:forState:方法
[button setBackgroundImage:[self imageWithColor:[UIColor blueColor]] forState:UIControlStateHighlighted];
(UIImage )imageWithColor:(UIColor )color {
CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
93、关于图片拉伸
推荐看这个博客,讲的很详细http://blog.csdn.net/qq/article/details/8615661
94、利用runtime获取一个类所有属性
(NSArray *)allPropertyNames:(Class)aClass
objc_property_t *properties = class_copyPropertyList(aClass, &count);
NSMutableArray *rv = [NSMutableArray array];
for (i = 0; i & i++)
objc_property_t property = properties[i];
NSString *name = [NSString stringWithUTF8String:property_getName(property)];
[rv addObject:name];
free(properties);
95、设置textView的某段文字变成其他颜色
(void)setupTextView:(UITextView )textView text:(NSString )text color:(UIColor *)color {
NSMutableAttributedString *string = [[NSMutableAttributedString alloc]initWithString:textView.text];
[string addAttribute:NSForegroundColorAttributeName value:color range:[textView.text rangeOfString:text]];
[textView setAttributedText:string];
96、让push跳转动画像modal跳转动画那样效果(从下往上推上来)
(void)push
TestViewController *vc = [[TestViewController alloc] init];
vc.view.backgroundColor = [UIColor redColor];
CATransition* transition = [CATransition animation];
transition.duration = 0.4f;
transition.type = kCATransitionMoveIn;
transition.subtype = kCATransitionFromT
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController pushViewController:vc animated:NO];
CATransition* transition = [CATransition animation];
transition.duration = 0.4f;
transition.type = kCATransitionR
transition.subtype = kCATransitionFromB
[self.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[self.navigationController popViewControllerAnimated:NO];
97、上传图片太大,压缩图片
-(UIImage )resizeImage:(UIImage )image
float actualHeight = image.size.
float actualWidth = image.size.
float maxHeight = 300.0;
float maxWidth = 400.0;
float imgRatio = actualWidth/actualH
float maxRatio = maxWidth/maxH
float compressionQuality = 0.5;//50 percent compression
if (actualHeight & maxHeight || actualWidth & maxWidth)
if(imgRatio & maxRatio)
//adjust width according to maxHeight
imgRatio = maxHeight / actualH
actualWidth = imgRatio * actualW
actualHeight = maxH
else if(imgRatio & maxRatio)
//adjust height according to maxWidth
imgRatio = maxWidth / actualW
actualHeight = imgRatio * actualH
actualWidth = maxW
actualHeight = maxH
actualWidth = maxW
CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight);
UIGraphicsBeginImageContext(rect.size);
[image drawInRect:rect];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
NSData *imageData = UIImageJPEGRepresentation(img, compressionQuality);
UIGraphicsEndImageContext();
return [UIImage imageWithData:imageData];
由于简书对文章篇幅有一定限制,只能分篇书写,感兴趣的朋友不妨关注一下,后面还有很多高质量的东西准备分享!文章中的代码有问题可以直接私信我或者加入我们的技术群一起交流。
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 flanimatedimage 的文章

 

随机推荐