首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

iOS开发-UISwipeGestureRecognizer滑动手势

滑动手势也算是iOS中交互中很重要的一部分,上下左右滑动,UISwipeGestureRecognizer可以很轻松的解决这个问题,没什么难度直接看代码吧: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 UISwipeGestureRecognizer *upSwipeGestureRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget: self action: @selector (swipeGestureRecognizer:)]; upSwipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionUp; [ self .view addGestureRecognizer:upSwipeGestureRecognizer]; UISwipeGestureRecognizer *downSwipeGestureRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget: self action: @selector (swipeGestureRecognizer:)]; downSwipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionDown; [ self .view addGestureRecognizer:downSwipeGestureRecognizer]; UISwipeGestureRecognizer *leftSwipeGestureRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget: self action: @selector (swipeGestureRecognizer:)]; leftSwipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionLeft; [ self .view addGestureRecognizer:leftSwipeGestureRecognizer]; UISwipeGestureRecognizer *rightSwipeGestureRecognizer=[[UISwipeGestureRecognizer alloc]initWithTarget: self action: @selector (swipeGestureRecognizer:)]; rightSwipeGestureRecognizer.direction=UISwipeGestureRecognizerDirectionRight; [ self .view addGestureRecognizer:rightSwipeGestureRecognizer]; 手势处理: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -( void )swipeGestureRecognizer:(UISwipeGestureRecognizer *)recongnizer{ if (recongnizer.direction==UISwipeGestureRecognizerDirectionUp) { NSLog (@ "向上滑动" ); NSLog (@ "博客园-FlyElephant" ); } if (recongnizer.direction==UISwipeGestureRecognizerDirectionDown) { NSLog (@ "向下滑动" ); NSLog (@ "原文地址:http://www.cnblogs.com/xiaofeixiang" ); } if (recongnizer.direction==UISwipeGestureRecognizerDirectionLeft) { NSLog (@ "向左滑动" ); NSLog (@ "iOS技术交流群:228407086" ); } if (recongnizer.direction==UISwipeGestureRecognizerDirectionRight) { NSLog (@ "向右滑动" ); } } 效果图: 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4586316.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS开发-类簇(Class Cluster)

类簇(Class Cluster)是定义相同的接口并提供相同功能的一组类的集合,仅公开接口的抽象类也可以称之为类簇的公共类,每个具体类的接口有公共类的接口抽象化,并隐藏在簇的内部。这些类一般不能够直接使用,一般都是由公共类的子类来实现,可以称之为私有子类。看概念会觉得有点枯燥,其实最常用的NSString就是一个类簇,不过看起来不明显,比较明显的是NSNumber,numberWithInt,numberWithDouble,这些方法其实在调用NSNumber的时候父类实例化私有子类,返回对应的实例。 基础概念 概念一般都是比较枯燥一点,我们可以先写一个简单的测试小程序来看一下NSString类簇大概的样子: 1 2 3 4 5 NSString *result= @"博客园-FlyElephant" ; classClusterLog(result); classClusterLog([result stringByAppendingString: @"原文地址:http://www.cnblogs.com/xiaofeixiang/" ]); classClusterLog([NSString stringWithUTF8String: "---" ]); classClusterLog(NSHomeDirectory()); 输出方法: 1 2 3 4 5 6 7 static void classClusterLog(NSString *str){ NSLog( @"Content=%@,Class=%s,\tmember=%s,\tkind=%s\n" , str, [NSStringFromClass([str class ]) UTF8String], [str isMemberOfClass:[NSString class ]]? "Yes" : "NO" , [str isKindOfClass:[NSString class ]]? "YES" : "NO" ); } 测试结果: 通过Log我们输出了类的真实的类型,我们发现每个类的类型都不一样,而且我们MemberClass得到的是类簇的类型,KindClass才能得到子类的类型,很多情况下公共类作为抽象类被实现的时候,各个方法都是在子类中具体实现的,因此即使直接生成继承公共类的子类,也不能立即产生用户想要的功能。 类簇的子类 类簇是多种类别实现抽象化,在公共类的外部只有类簇是可见的,虽然类簇是作为Foundation框架的基本类实现,一般情况下没必要生成子类,不过有的时候类簇的基本方法方法不能满足基本需求的时候可以使用Category进行扩展,这个之前的文章中有过讲述,如果不是很清晰,可以查看一下。类簇包含了基本的方法,但是具体的实现都是在私有子类中。如果我们需要新生成子类,可以直接实现已经公开的基本方法。 NSString有两个基本的方法:length和characterAtIndex,我们定义个NSString子类看一下效果: 1 2 3 4 5 6 7 8 9 10 11 12 @ interface BitPattern : NSString { unsigned char value; } -(id)initWithChar:( char )val; -(NSUInteger)length; -(unichar)characterAtIndex:(NSUInteger)index; @end 实现文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @implementation BitPattern -(id)initWithChar:( char )val{ self=[super init]; if (self) { value=val; } return self; } -(NSUInteger)length{ return 4; } -(unichar)characterAtIndex:(NSUInteger)index{ return 'K' ; } @end 简单调用: 1 2 3 NSString *bits; bits=[[BitPattern alloc]initWithChar: 'A' ]; NSLog( @"%@--结果为:%s" ,[bits class ],[bits UTF8String]); 最后的结果为KKKK,关于类簇的子类的实现方法有几个需要考虑的地方: 1.确定私有数据结构,作为超类不能使用所有的数据结构; 2.定义初始化方法,定义init..这样的初始化方法,不能继承和使用init之外的超类的初始化方法; 3.定义构造器,不能继承和使用超类的同样的方法; 4.定义基本方法 5.定义其他方法,通过定义基础方法,公共类声明的方法可以暂且执行,但是利益哦那个生成的数据结构的特征也许能够产生更加高效的方法; iOS中的类簇也可以理解为简单工厂设计模式的一种具体实现~ 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4712282.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS开发-UIScrollView图片无限循环

关于UIScrollView图片浏览的例子有很多,之前也写过类似方面的文章,关于UIScrollView的图片循环在新闻类的App基本上是比较常见的一种情况就是图片浏览,然后根据不同的图片显示不同的内容显示不同的图片的介绍,因为属于比较常用的空间,先来看下需要实现的效果: 小圆点指示器是通过UIPageControl实现的,图片循环通过UIScrollView实现: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 -(UIPageControl *)pageControl{ if (!_pageControl) { _pageControl=[[UIPageControl alloc]initWithFrame:CGRectMake(0, 0, 150, 40)]; _pageControl.currentPage=0; _pageControl.pageIndicatorTintColor=[UIColor whiteColor]; _pageControl.currentPageIndicatorTintColor=[UIColor greenColor]; } return _pageControl; } -(UIScrollView *)scrollView{ if (!_scrollView) { CGRect screenRect=[[UIScreen mainScreen]bounds]; _scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 64, CGRectGetWidth(screenRect), CGRectGetHeight(screenRect)-164)]; [_scrollView setBounces:NO]; [_scrollView setShowsHorizontalScrollIndicator:NO]; [_scrollView setPagingEnabled:YES]; _scrollView. delegate =self; } return _scrollView; } 关于分页的页面配置以及页数Label的设置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 self.screenRect=[[UIScreen mainScreen]bounds]; CGFloat width=self.scrollView.bounds.size.width; CGFloat height=self.scrollView.bounds.size.height; self.imageArr=@[ @"girl0.jpg" , @"girl1.jpg" , @"girl2.jpg" ]; [self.scrollView setContentSize:CGSizeMake([self.imageArr count]*width, height)]; for (NSInteger i=0; i<[self.imageArr count]; i++) { UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(i*width, 0, width,height)]; imageView.image=[UIImage imageNamed:self.imageArr[i]]; imageView.contentMode=UIViewContentModeScaleToFill; [self.scrollView addSubview:imageView]; } [self.view addSubview:self.scrollView]; self.pageControl.numberOfPages=[self.imageArr count]; self.pageControl.center=CGPointMake(self.scrollView.center.x, CGRectGetMaxY(self.scrollView.bounds)+50); [self.view addSubview:self.pageControl]; self.pageLabel.text=[NSString stringWithFormat: @"%d/%lu" ,1,[self.imageArr count]]; [self.view addSubview:self.pageLabel]; 实现UIScrollViewDelegate中scrollViewDidEndDecelerating的方法: 1 2 3 4 5 6 7 8 9 10 11 //博客园-FlyElephant 原文地址:http://www.cnblogs.com/xiaofeixiang/ -( void )scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ if (self.currentPage==[self.imageArr count]-1) { self.currentPage=0; self.scrollView.contentOffset=CGPointMake(0, 0); } else { self.currentPage=scrollView.contentOffset.x/CGRectGetWidth(self.screenRect); } self.pageControl.currentPage=self.currentPage; [self.pageLabel setText:[NSString stringWithFormat: @"%ld/%lu" ,self.currentPage+1,[self.imageArr count]]]; } 简单的UIScrollView实现基本上ok了,当然关于UIScrollView根据不同场景去实现不同的功能代码量比这肯定更复杂~ 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4754451.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS应用开发:什么是ARC

ARC是什么 ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Reference Counting)。简单地说,就是代码中自动加入了retain/release,原先需要手动添加的用来处理内存管理的引用计数的代码可以自动地由编译器完成了。 该机能在 iOS 5/ Mac OS X 10.7 开始导入,利用 Xcode4.2 可以使用该机能。简单地理解ARC,就是通过指定的语法,让编译器(LLVM 3.0)在编译代码时,自动生成实例的引用计数管理部分代码。有一点,ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。 变化点 通过一小段代码,我们看看使用ARC前后的变化点。 C代码 @interfaceNonARCObject:NSObject{ NSString*name; } -(id)initWithName:(NSString*)name; @end @implementationNonARCObject -(id)initWithName:(NSString*)newName{ self=[superinit]; if(self){ name=[newNameretain]; } returnself; } -(void)dealloc{ [namerelease]; [Superdealloc]; } @end C代码 @interfaceARCObject:NSObject{ NSString*name; } -(id)initWithName:(NSString*)name; @end @implementationARCObject -(id)initWithName:(NSString*)newName{ self=[superinit]; if(self){ name=newName; } returnself; } @end 我们之前使用Objective-C中内存管理规则时,往往采用下面的准则 生成对象时,使用autorelease 对象代入时,先autorelease后再retain 对象在函数中返回时,使用return [[object retain] autorelease]; 而使用ARC后,我们可以不需要这样做了,甚至连最基础的release都不需要了。 说明:在arc中,strong对应原来的retain与copy,weak对应原来的assign。 arc的使用有两点: A:在build phases中修改compiler Flags值。 B:在代码中判断是否支持arc,包括对属性(property)、释放(release)的判断。 在dealloc中需要这样做: 类如果注册了通知(观察者模式),需要remove掉。这个不管是否支持arc,都必须要做的。 - (void)dealloc { [[NSNotificationCenterdefaultCenter] removeObserver:self];//如果注册了通知的话。 [self removeObserver:self forKeyPath:keyPath];//如果注册了kvo的话。 #if !__has_feature(objc_arc) //在这里也需要判断是否支持arc,支持的话就执行旧工程中该release的语句. [array release]; //array代表alloc但没有autorelease的变量 [super dealloc]; #endif } 总结: 1,arc的设置是在build phases中修改compiler Flags的值。 2,如果使用了arc,在你的代码中不可以使用retain, release, autorelease,如果使用的话会报错。 3,如果使用了arc,在@property声明中,用strong和weak代替相应的retain, copy,和assign。 4,如果使用了arc,NSAutoReleasePool也不能使用,测试发现,用@autoreleasepool 代替,不会编译报错。 总之,一切你之前“背过”的那几条内存管理规则,你都不用去管了。而且,个人感觉,用arc代码清晰很多,而且效率也提高了些。 使用ARC的好处 使用ARC有什么好处呢? 看到上面的例子,大家就知道了,以后写Objective-C的代码变得简单多了,因为我们不需要担心烦人的内存管理,担心内存泄露了 代码的总量变少了,看上去清爽了不少,也节省了劳动力 代码高速化,由于使用编译器管理引用计数,减少了低效代码的可能性 不好的地方 记住一堆新的ARC规则 — 关键字及特性等需要一定的学习周期 一些旧的代码,第三方代码使用的时候比较麻烦;修改代码需要工数,要么修改编译开关 关于第二点,由于 XCode4.2 中缺省ARC就是 ON 的状态,所以编译旧代码的时候往往有"Automatic Reference Counting Issue"的错误信息。 这个时候,可以将项目编译设置中的“Objectice-C Auto Reference Counteting”设为NO。如下所示。 如果只想对某个.m文件不适应ARC,可以只针对该类文件加上 -fno-objc-arc 编译FLAGS,如下图。 ARC基本规则 retain, release, autorelease, dealloc由编译器自动插入,不能在代码中调用 dealloc虽然可以被重载,但是不能调用[super dealloc] 由于ARC并不是GC,并需要一些规则让编译器支持代码插入,所以必须清楚清楚了这些规则后,才能写出健壮的代码。 Objective-C对象 ObjectiveC中的对象,有强参照(Strong reference)和弱参照(Weak reference)之分,当需要保持其他对象的时候,需要retain以确保对象引用计数加1。对象的持有者(owner)只要存在,那么该对象的强参照就一直存在。 对象处理的基本规则是 只要对象的持有者存在(对象被强参照),那么就可以使用该对象 对象失去了持有者后,即被破弃 强参照 (Strong reference) (s1) firstName作为”natsu”字符串对象的最初持有者,是该NSString类型对象的Strong reference。 (s2) 这里将firstName代入到aName中,即aName也成为了@”natsu”字符串对象的持有者,对于该对象,aName也是Strong reference。 (s3) 这里,改变firstName的内容。生成新的字符串对象”maki”。这时候firstName成为”maki”的持有者,而@”natsu”的持有者只有aName。每个字符串对象都有各自的持有者,所以它们都在内存中都存在。 (s4) 追加新的变量otherName, 它将成为@”maki”对象的另一个持有者。即NSString类型对象的Strong reference。 (s5) 将otherName代入到aName,这时,aName将成为@”maki”字符串对象的持有者。而对象@”natsu”已经没有持有者了,该对象将被破弃。 弱参照 (Weak reference) 接下来我们来看看弱参照 (Weak reference) 的使用方式。 (w1) 与强参照方式同样,firstName作为字符串对象@”natsu”的持有者存在。即是该NSString类型对象的Strong reference。 (w2) 使用关键字__weak,声明弱参照weakName变量,将firstName代入。这时weakName虽然参照@”natsu”,但仍是Weak reference。即weakName虽然能看到@”natsu”,但不是其持有者。 (w3) firstName指向了新的对象@”maki”,成为其持有者,而对象@”natsu”因为没有了持有者,即被破弃。同时weakName变量将被自动代入nil。 引用关键字 ARC中关于对象的引用参照,主要有下面几关键字。使用strong, weak, autoreleasing限定的变量会被隐式初始化为nil。 __strong 变量声明缺省都带有__strong关键字,如果变量什么关键字都不写,那么缺省就是强参照。 __weak 上面已经看到了,这是弱参照的关键字。该概念是新特性,从 iOS 5/ Mac OS X 10.7 开始导入。由于该类型不影响对象的生命周期,所以如果对象之前就没有持有者,那么会出现刚创建就被破弃的问题,比如下面的代码。 C代码 NSString__weak*string=[[NSStringalloc]initWithFormat:@"FirstName:%@",[selffirstName]]; NSLog(@"string:%@",string);//此时string为空 如果编译设定OS版本 Deployment Target 设定为这比这低的版本,那么编译时将报错(The current deployment target does not support automated __weak references),这个时候,我们可以使用下面的__unsafe_unretained。 弱参照还有一个特征,即当参数对象失去所有者之后,变量会被自动付上nil (Zeroing)。 __unsafe_unretained 该关键字与__weak一样,也是弱参照,与__weak的区别只是是否执行nil赋值(Zeroing)。但是这样,需要注意变量所指的对象已经被破弃了,地址还还存在,但内存中对象已经没有了。如果还是访问该对象,将引起「BAD_ACCESS」错误。 __autoreleasing 该关键字使对像延迟释放。比如你想传一个未初始化的对像引用到一个方法当中,在此方法中实例化此对像,那么这种情况可以使用__autoreleasing。他被经常用于函数有值参数返回时的处理,比如下面的例子。 C代码 -(void)generateErrorInVariable:(__autoreleasingNSError**)paramError{ .... *paramError=[[NSErroralloc]initWithDomain:@"MyApp"code:1userInfo:errorDictionary]; } .... { NSError*error=nil; [selfgenerateErrorInVariable:&error]; NSLog(@"Error=%@",error); } 又如函数的返回值是在函数中申请的,那么希望释放是在调用端时,往往有下面的代码。 C代码 -(NSString*)stringTest { NSString*retStr=[NSStringstringWithString:@"test"]; return[[retStrretain]autorelease]; } //使用ARC -(NSString*)stringTest { __autoreleasingNSString*retStr=[NSStringalloc]initWithString:@"test"]; returnretStr; } 即当方法的参数是id*,且希望方法返回时对象被autoreleased,那么使用该关键字。 总结 今天,我们看到了基本的ARC使用规则 代码中不能使用retain, release, retain, autorelease 不重载dealloc(如果是释放对象内存以外的处理,是可以重载该函数的,但是不能调用[super dealloc]) 不能使用NSAllocateObject, NSDeallocateObject 不能在C结构体中使用对象指针 id与void *间的如果cast时需要用特定的方法(__bridge关键字) 不能使用NSAutoReleasePool、而需要@autoreleasepool块 不能使用“new”开始的属性名称 (如果使用会有下面的编译错误”Property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”) ARC工作原理是在编译程序的时候由xCode将内存操作的代码(如:retain,release 和 autorelease)自动添加到需要的位置。 ARC 只能在iOS4 和iOS5上使用,weak refrences 只能在iOS5上使用,并且只能是工程在ARC管理内存的时候才能用。 老版本的工程是可以转换成使用ARC的工程,转换规则包括: 1.去掉所有的retain,release,autorelease 2.把NSAutoRelease替换成@autoreleasepool{}块 3.把assign的属性变为weak 使用ARC的一些强制规定 1.不能直接调用dealloc方法,不能调用retain,release,autorelease,reraubCount方法,包括@selector(retain)的方式也不行 2.截图租户事故宣布dealloc方法来管理一些资源,但不能用来释放实例变量,也不能在dealloc方法里面去掉[super dealloc]方法,在ARC下父类的dealloc同样由编译器来自动完成 3.Core Foundation类型的对象任然可以用CFRetain,CFRelease这些方法 4.不能在使用NSAllocateObject和NSDeallocateObject对象 5.不能在c结构体中使用对象指针,如果有类似功能可以创建一个Objective-c类来管理这些对象 6.在id和void *之间没有简便的转换方法,同样在Objective-c和core Foundation类型之间的转换都需要使用编译器制定的转换函数 7.不能再使用NSAutoreleasePool对象,ARC提供了@autoreleasepool块来代替它,这样更加有效率 8.不能使用内存存储区(不能再使用NSZone) 9.不能以new为开头给一个属性命名 10.声明outlet时一般应当使用weak,除了对StoryBoard 这样nib中间的顶层对象要用strong 11.weak 相当于老版本的assign,strong相当于retain 对工程中的单个文件制定不使用ARC的方法:在targets的build phases选项下Compile Sources下选择要不使用arc编译的文件,双击它,输入-fno-objc-arc即可 属性值 关键字 所有权 strong __strong 有 weak __weak 无 unsafe_unretained __unsafe_unretained 无 copy __strong 有 assign __unsafe_unretained 无 retain __strong 有 strong 该属性值对应 __strong 关键字,即该属性所声明的变量将成为对象的持有者。 weak 该属性对应 __weak 关键字,与 __weak 定义的变量一致,该属性所声明的变量将没有对象的所有权,并且当对象被破弃之后,对象将被自动赋值nil。 并且,delegate 和 Outlet 应该用 weak 属性来声明。同时,如上一回介绍的 iOS 5 之前的版本是没有 __weak 关键字的,所以 weak 属性是不能使用的。这种情况我们使用 unsafe_unretained。 unsafe_unretained 等效于__unsafe_unretaind关键字声明的变量;像上面说明的,iOS 5之前的系统用该属性代替 weak 来使用。 copy 与 strong 的区别是声明变量是拷贝对象的持有者。 assign 一般Scalar Varible用该属性声明,比如,int, BOOL。 retain 该属性与 strong 一致;只是可读性更强一些。 读写相关的属性 (readwrite, readonly) 读写相关的属性有 readwrite 和 readonly 两种,如果使用ARC之后,我么需要注意一下 readonly 属性的使用。 比如下面的变量声明。 @property(nonatomic,readonly)NSString*name; 一般声明为 readonly 的变量按理说应该不需要持有所有权了,但是在ARC有效的情况下,将出现下面的错误信息 : “ARC forbids synthesizing a property of an Objective-C object with unspecified ownership or storage attribute 如果定义了ARC有效,那么必须要有所有者属性的定义;所以我们的代码改成这样,就OK了 @property(nonatomic,strong,readonly)NSString*name; 不过有一点,Scalar Varible的变量缺省都有 assign 的属性定义,所以不需要给他们单独的明示声明了。 来源:http://justcoding.iteye.com/blog/1391548 本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3603802.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS开发-16进制颜色转换

项目中经常会用到颜色转换,有的是通过十六进制转成数字转颜色,想简单的点直接通过字符串转一下,简单扩展了一下分类UIColor,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 +(UIColor *)colorWithHex:( NSString *)hexColor{ return [ self colorWithHex:hexColor alpha:1.0f]; } //http://www.cnblogs.com/xiaofeixiang iOS技术交流:228407086 +(UIColor *)colorWithHex:( NSString *)hexColor alpha:( float )alpha{ //删除空格 NSString *colorStr = [[hexColor stringByTrimmingCharactersInSet:[ NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be 6 or 8 characters if ([colorStr length] < 6||[colorStr length]>7) { return [UIColor clearColor]; } // if ([colorStr hasPrefix:@ "#" ]) { colorStr = [colorStr substringFromIndex:1]; } NSRange range; range.location = 0; range.length = 2; //red NSString *redString = [colorStr substringWithRange:range]; //green range.location = 2; NSString *greenString = [colorStr substringWithRange:range]; //blue range.location = 4; NSString *blueString= [colorStr substringWithRange:range]; // Scan values unsigned int red, green, blue; [[ NSScanner scannerWithString:redString] scanHexInt:&red]; [[ NSScanner scannerWithString:greenString] scanHexInt:&green]; [[ NSScanner scannerWithString:blueString] scanHexInt:&blue]; return [UIColor colorWithRed:(( float )red/ 255.0f) green:(( float )green/ 255.0f) blue:(( float )blue/ 255.0f) alpha:alpha]; } 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4621523.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册