加载、滑动翻阅大量图片解决方案详解 今天分享一下私人相册中,读取加载、滑动翻阅大量图片解决方案,我想强调的是,编程思想无关乎平台限制。我要详细说一下,在缩略图界面点击任意小缩略图后,进入高清大图全屏浏览界面的这短暂的1秒内(和后续的几秒),都发生了什么。 常规思路流程点击任意小图后,1.首先制作scrollview框架:大小2个scrollview,小的用于手势缩放单一图片,大的横向依次加载全部照片2.制作好scrollview框架后...
iOS开发实践之GET和POST请求 GET和POST请求是HTTP请求方式中最最为常见的。在说请求方式之前先熟悉HTTP的通信过程:请求1、请求行 : 请求方法、请求路径、HTTP协议的版本GET /MJServer/resources/images/1.jpg HTTP/1.12、请求头 : 客户端的一些描述信息Host: 192.168.1.111:8080 // 客户端想访问的服务器主机地址User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0 // 客户端的类型,客户端的软件环境Accept...
上一篇笔记以及之前部分笔记里面有些属性设置了没效果,比如UISwitch开关控件的开关背景图片;或者直接没有那种我们想要的属性,比如直接用代码设置控件大小。所以,我们需要用第三方类库,意思大概是我们不用UISwitch类来实例化一个对象了,而是用第三方的类来实例化一个对象,然后这个对象可以进行各种修改随心所欲。当然,这里的逻辑就是,我们要导入第三方类库,可能需要把它头文件神马的引入进来,然后就可以实例化,但是如何...
一、手势识别器//0.打开UIImageView的用户交互self.iconView.userInteractionEnabled = YES;//1.创建手势识别器UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];//1.1.设置手势识别器的属性//设置用户必须点击几次才能触发点击事件tap.numberOfTapsRequired = 2;//设置用户必须两根手指同时点击才会触发事件tap.numberOfTouchesRequired = 2;tap.delegate = self;(并遵守协议)//2.添加手势识别器到vi...
一、能完成功能的“问题代码”1.从plist中加载的数据2.实现的代码 1 //2 // LFViewController.m3 // 03-应用管理4 //5 // Created by apple on 14-5-22.6 // Copyright (c) 2014年 heima. All rights reserved.7 //8 9 #import "LFViewController.h"
10
11 @interface LFViewController ()
12 @property (nonatomic, strong) NSArray *appList;
13 @end
14
15 @implementation LFViewController
16
17 - (NSArray *)appList...
首先在ViewController.h文件中:#import <UIKit/UIKit.h>#import "SRWebSocket.h"//继承SRWebSocket.h,作为登录服务器@interface ViewController : UIViewController<UITextFieldDelegate,SRWebSocketDelegate> //- (IBAction)SaveLogin:(id)sender;//与SB联系账号输入,密码输入与登录按钮,并且设置两个label写上提示账号和密码输入@property (weak, nonatomic) IBOutlet UITextField *userName;@property (weak, nonatomic) IB...
开发一般APP必备三方库,省力秘籍!!!本篇文章会经常更新最新常用的三方。1.网络请求库 AFNetworkinghttps://github.com/AFNetworking/AFNetworking2.图片缓存器 SDWebImagehttps://github.com/rs/SDWebImage3.下拉刷新上拉加载 MJRefreshhttps://github.com/CoderMJLee/MJRefresh4.JSON与Object互转 JSONModelhttps://github.com/jsonmodel/jsonmodel5.加载进度框 MBProgressHUDhttps://github.com/jdg/MBProgressHUD6.Toast提示...
使用静态库的好处1,模块化,分工合作2,避免少量改动经常导致大量的重复编译连接3,也可以重用,注意不是共享使用 动态库使用有如下好处:1使用动态库,可以将最终可执行文件体积缩小2使用动态库,多个应用程序共享内存中得同一份库文件,节省资源3使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。从1可以得出,将整个应用程序分模块,团队合作,进行分工,影响比较小。等其他好处,从...
//
// main.m
// 猜数
//#import <Foundation/Foundation.h>
#import "Guess.h"int main(int argc, const char * argv[])
{Guess * number = [[Guess alloc]init];NSLog(@"请输入您所猜的数字");int guessNumber;scanf("%d",&guessNumber);[number guessNumber:guessNumber];//NSLog(@"%d",number->_guessNumber);return 0;
}
#import <Foundation/Foundation.h>@interface Guess : NSObject
{@publicint _guessNumber;
}-(void)...
1、以后的应用程序,都使用AutoLayout, 不要再用绝对定位。2、使用类似网页的方式来设计界面。3、设计师好,程序员也好,尽量使用点这个单位进行思考,而不要使用像素。比如,你需要做44 x 66个点的按钮,2x模式,就乘以2, 3x模式就乘以3。这样的思考方式可以大致估计到真实的物理长度。44个点,就是手机上导航栏,工具栏的高度。假如用像素思考,容易使得做出的图片过大或者过小。4、非矢量素材,就可以做尺寸最大的,之后再进行缩...
@property在xcode 4.5之前只是单纯的告诉编译器,“我在后面实现了对那个变量的setter和getter方法,你放心吧”,但是如果你不写synthesize配合的话就会出错。synthesize才是代替setter和getter的关键部分。@synthesize在xcode4.5之前是配合@property使用,帮助你隐式了实现了一个setter和getter。如果你没有在interface里声明变量,它会帮你隐式的创建一个已下划线开头的同名变量,比如@synthesize myName = _myName;在xcode4.5以后...
对于数据持久化的问题,博主并不准备在博文内放很多的代码进行更深一步解释,只是简单的介绍一下四种数据持久化,如有时间,会另外针对各个数据持久化的方法进行更进一步的阐述。直接进入主题:〈1、NSUserDefault用来存储配置信息,开发者可以通过这个实例对象,对这些已有信息进行修改,也可以根据自己的需求创建新的配置项。这是一个系统的单例,是一个轻量级存储机制,一般用来存储用户的登录状态,一般不会用来存储复杂对象。...
来自:http://www.jianshu.com/p/bcf86b170d9c前言 为什么会写这个?因为在iOS开发中,界面的布局一直没有Android布局有那么多的方法和优势,我个人开发都是纯代码,Masonry这个框架我在开发中也是不用的,一个是代码布局的时候,代码量比较多,另外好像在iOS10 布局有问题,网上也有些解决的方法了。所以就想能自定义一些UI控件,使布局更加简单实现思路可以像Android的wrap_content一样,是UILabel 可以根据内容来展示控件的...
我们发送请求后,一般会获得data数据,这个时候我们反序列化即可。常用的数据格式之一是JSON,格式如:{key:value,key:value,key:value....}(1)因为iOS5之前苹果不支持JSON解析,所以催生很多第三方解析,SBJson以及JSONKit。简单地JSON反序列化示例如下: NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];NSURLRequest *request=[NSURLRequest requestWithURL:url];[NSURLConnection sendAsynchronousRequest:req...
程序开发中我们经常会用到的两个快捷键Ctrl+Z和Ctrl+C,撤销和复制,Cocoa开发也可以实现这两个操作,为我们提供非常简单的操作类NSUndoManger,也可以称之为撤销管理器,NSUndoManger内部维护两个栈,undo栈和redo栈。创建一个可撤销的操作需要创建一个逆向的操作,然后通过逆向的操作达到做出对应的改变,实现起来非常简单。首先我们来看一个非常简单的例子: Message *msg=[[Message alloc]init];[msg addObjectMethod:@...