网上的 UI 总结

1.UILabel 

1) label.frame        //CGRectMake(x, y, width, height);

 2) label.text            //label.textColor 

3) label.backgroundColor        //UIColor  redColor  colorWithRed: green: blue: alpha: 

4) label.textAlignment    //UITextAlignmentCenter Left Right 

5) label.font            //UIFont familyNames  boldSystemFontOfSize:    [UIFont fontWithName: size: ]

 6) label.shadowOffset        //CGSizeMake(width, height) 

7) label.shadowColor 

8) label.lineBreakMode    //UILineBreakModeWordWrap 

9) label.numberOfLines

10) CGSize size = [string sizeWithFont: constrainedToSize: lineBreakMode:];

11) [self.window addSubview: ];

12) label.adjustsFontSizeToFitWidth = YES;

2.UIButton 

继承自UIControl, UIControl是在UIView的基础上增加了一个点击事件 

1) buttonWithType:    //初始化只有这一种方法, UIButtonTypeRoundedRect, InfoLight, InfoDark, ContactAdd, DetailDisclosure, Custom 

2) setTitle: forState:    //UIControlStateNormal, Highlighted 

3) setTitleColor: forState:  

4) setTintColor:        //按钮点击后的颜色, 只有RoundedRect有这个效果 

5) button.tag            //设置标识属性, 唯一标识一个view 

6) addTarget:self action:@selector() forControlEvents:    //在哪个事件下, 执行哪个对象的方法, UIControlEventTouchUpInside              //哪个对象调用这个@selector(buttonClick:), 这个对象就作为参数传给buttonClick: 

7) setBackgroundImage: forState:      

8) setImage: forState:

3.UIView 

所有能看的见的都是view 

CGRect frame = {CGOrigin, CGSize};    CGOrigin = {x, y}; //坐标是相对的    

CGSize = {width, height}; 

CGPoint center = {x, y}; CGRect bounds; 

CGRectContainsPoint(rect, point);    // 判断点point是否在rect内 

[self.window sendSubviewToBack: ];    bringSubviewToFront:    exchangeSubviewAtIndex: withSubviewAtIndex: insertSubview: atIndex:    insertSubview: belowSubview:    insertSubview: aboveSubview:

 view.tag    [self.view viewWithTag: ]    // 根据tag值, 得到对应的view 

view.clipsToBounds = YSE;    // 自动剪裁掉超出本身frame大小的子view的内容 

view.contentMode        // 内容填充模式 

view.autoresizesSubviews = YSE;    // 设置当前view的子view可以自动布局

 subview.autoresizingMask = UIViewAutoresizingFlexibleWidth;    // 增加多个自动布局模式, 可以使用位或运算 (|) [UIView animateWithDuration: animations:^{  } completion:^(BOOL finished){  }];    // UIView动画 

[UIScreen mainScreen]        // 获得屏幕类对象 

 currenMode [UIDevice currentDevice]    // 获得当前设备类对象  name, systemName, SystemVersion

4.UIImageView 

[UIImage imageNamed:]

 image.size.width    image.size.height 

initWithImage: imageView.image        // imageView中的image 

NSData *data = UIImagePNGRepresentation(imageView.image);    // 将PNG图片转成二进制数据 UIImageJPEGRepresentation(imageView.image, 0.5)    // 转换JPEG图片, 第二个参数为压缩比0到1之间的数 UITapGestureRecognizer    // 点击手势 

 initWithTarget: self action: @selector()   

 numberOfTapsRequired    // 点击次数 (默认为1)

  numberOfTouchesRequired    // 几只手指点击 (默认为1)  

tapGestureRecognizer.view.tag    // 被点击的view的tag 

 gesture.view        // 得到点击的视图 

 [gesture state]        // 手势的状态,

 UIGestureRecognizerStateBegan等 

 [gesture locationInView: ]    // 点击手势在视图中的位置 

addGestureRecognizer:        // 加入手势

imageView.userInteractionEnabled = YES  // 打开imageView的交互功能

 ImageView动画, 将一组图片放到一个数组中

 imageView.animationImages = imagesArray; imageView.animationDuration = 1;    // 动画周期时间 imageView.animationRepeatCount = 5;    // 默认是无限次 startAnimating    stopAnimating5.UIViewController 分为view和controller两部分, 能看到的只有view self.view.backgroundColor self.window.rootViewController = rootViewController;    // 在window中添加主视图控制器 presentViewController: animated: YES completion:^{ }    // 窗体跳转 subViewController.modalTransitionStyle = UIModalTransitionsStyleFlipHorizontal;    // 跳转风格 dismissViewControllerAnimated: YES completion:^{ }    // 关闭对话窗口, 即返回上一个窗口 函数介绍:    1)-(id)initWithNibName: bundle:    // 将xib文件转换为nib描述文件  2)-(void)loadView            // 用于初始化nib文件里描述的控件  3)-(void)viewDidLoad            // 进一步修改self.view(即修改手写控件), 默认只执行一次, 只有当系统内存不够时, 才会自动调用viewDidUnLoad方法再次执行  4)-(void)viewWillAppear:        // 当界面当要进入时显示 (界面不可见)  5)-(void)viewDidAppear:            // 当界面已经显示时调用 (界面可见)  6)-(void)viewWillDisappear:        // 当界面将要退出时调用 (界面可见)  7)-(void)viewDidDisappear:        // 当界面已经退出后调用 (界面不可见)  8)-(void)didReceiveMemoryWarning    // 当内存不够用时, 系统自动调用此方法, 释放自己写入的内容的内存, 不会销毁  9)-(void)viewDidUnload            // 当内存不够用时, 系统自动调用此方法, 直接销毁界面6.UINavigationController window -> UINavigationController -> UIViewController -> view initWithRootViewController: rootViewController; self.window.rootViewController = navigationController; [self.navigationController pushViewController: animated: YES]    // 压入当前视图控制器, 即进入这个页面 [self.navigationController popViewControllerAnimated: YES]    // 弹出当前视图控制器, 即返回上个页面 [self.navigationController popToRootViewControllerAnimated: YES];    // 弹出导航控制器中所有视图控制器到主视图控制器 self.navigationController.viewControllers    // 得到导航控制器中所有的视图控制器对象数组, 所有的视图控制器共用一个导航控制器 [self.navigationController popToViewController: animated: YES]    // 弹出一些视图控制器, 到指定视图控制器上7.UINavigationBar self.navigationController.navigationBar.barStyle = UIBarStyleBlack;    // 设置导航条, 如果用半透明模式view.frame就是正常的 self.navigationController.navigationBar.backgroundColor    // 只有半透明模式才能设置颜色, 而且还会和黑色半透明的相融合 self.navigationController.navigationBar.frame        // 设置导航条frame, 默认高度为44 self.navigationController.navigationBar setBackgroundImage: forBarMetrics: UIBarMetricsDefault      // 设置导航条背景图片, BarMetrics是iPhone形式(人像, 景色), 图片不会拉伸压缩, 如果图片过大, 会覆盖到下面的视图控制器 self.navigationController.navigationBar.hidden = YES;    // 隐藏导航条 [self.navigationController setNavigationBarHidden: YES animated: YES]8.UINavigationItem 每一个界面都有自己对导航控制器的描述 self.navigationItem.title        // 设置标题, 居中显示 self.navigationItem.titleView        // 设置标题视图, view中的frame的x, y不会影响titleView的位置, 永远居中显示 UIBarButtonItem            // 专门用于设置导航条按钮和工具条按钮  initWithBarButtonSystemItem: UIBarButtonSystemItemCancel target: self action: @selector() // 使用系统提供按钮  initWithTitle: style: UIBarButtonItemsStylePlain target: self action: @selector()    // 自定义标题      // Plain风格会根据导航条风格变换颜色, Done风格永远为蓝色  initWithCustomView:    // 自定义view self.navigationItem.leftBarButtonItem = barButtonItem;    rightBarButtonItem  self.navigationItem.rightBarButtonItems = barButtonItemsArray    // 在导航控制器一侧加入多个按钮, 先将按钮放入数组中9.UIToolbar 只要有导航控制器就有工具条, 没有导航控制器就没有工具条, 一般工具条是隐藏的. [self.navigationController setToolbarHidden: NO animated: YES];    // 显示工具条 UIBarButtonSystemItemFlexibleSpace是加空格用的 self.toolbarItems = barButtonItemsArray    // 将按钮加到工具条上 [self.navigationController.toolbar setBackgroundImage: forToolbarPosition: UIToolbarPositionBottom barMetrics: UIBarMetricsDefault];        // forToolbarPosition当工具条在哪个位置的时候显示图片 self.navigationController.toolbar.frame    // 设置工具条位置10.UITextField 文本输入框, 背景默认为透明色, clearColor, 使用代理收起键盘textField.text    // 文本框中的内容 textField.borderStyle = UITextBorderStyleRoundedRect;        // 设置边框样式 textField.placeholder        // 设置提示文字 textField.keyboardType = UIKeyboardTypeEmailAddress;        // 设置键盘样式 textField.secureTextEntry = YES;    // 设置密文输入 textField.clearButtonMode = UITextFieldViewModeWhileEditing;    // 设置清空按钮 [textField resignFirstResponder];    // 取消第一响应者, 让文本输入框收起键盘退出编辑模式 [textField becomeFirstResponder];    // 让文本输入框成为第一响应者, 弹出键盘进入编辑模式11.UITextView textView.text        // 设置UITextView中的文字 textView.font        // 设置UITextView的字体 textView.editable = NO    // 设置textView不能编辑12.[NSNotificationCenter defaultCenter] 系统通知中心, 是观察者模式的一种体现 (在IOS中: 代理用作1对1, 通知中心用作多对多); 通知中心只有三种操作, 订阅消息, 发送消息, 取消订阅消息 [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardWillShow) name: UIKeyboardWillShowNotification object: nil]    // 键盘将要升起时, 发送一条消息给@selector(), 还有WillHide13.UISegmentedControl 将一组选项放在数组中, initWithItems: array [segmentedControl insertSegmentWithTitle: atIndex: animated: ]; segmentedControl.selectedSegmentIndex        // 选中的选项的索引 [segmentedControl titleForSegmentAtIndex: ]    // 指定索引文字的选项 segmentedControl.momentary = YES    // 默认选项选中后会一直保持选中状态, 设为YES会变为原样 UISegmentedControlStyle        // 设置控件风格, 默认为Plain [segmentedControl setTintColor: ]    // 设置色调 [segmentedControl addTarget: self action: @selector() forControlEvents: UIControlEventValueChanged];14.UISwitch frame的宽和高, 对开关没影响 [switch setOn: YES animated: YES]        // 设置开关为开状态, 默认是关 [switch addTarget: self action: @selector() forControlEvents: UIControlEventValueChanged]; switch.isOn        switch.isOff15.UISlider slider.minimumValue        // 设置最小值 slider.maximumValue        // 设置最大值 slider.value            // 设置当前默认值 setThumbImage: forState:    // 设置slider上的小滑块thumb的图片 [slider addTarget: self action: @selector() forControlEvents: UIControlEventValueChanged];    // 增加滑动事件16.UIProgressView initWithProgressViewStyle: UIProgressViewStyleDefault progressView.progress        // 设置进度条的值17.UIStepper stepper.maximumValue        // 设置最大值, 默认为0 - 100 stepper.minimumValue        // 设置最小值 stepper.stepValue        // 设置步长 addTarget: self action: @selector() forControlEvents:    UIControlEventValueChanged    // 添加点击事件18.UIActivityIndicatorView (活动等待器) initWithActivityIndicatorStyle: UIActivityIndicatorStyleWhite    // 设置模式 [activityIndicatorView startAnimating];        // 开始 [activityIndicatorView stopAnimating];        // 停止19.UITouch touch有三个函数, 点击时, 会自动调用这三个函数, 不需要初始化, 直接用这三个函数就行, touch得到的是坐标 -(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event {  // 在哪个view中就相对于哪个view计算坐标  CGPoint point = [[touches anyObject] locationInView: ]; } -(void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event -(void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event20.UIGestureRecognizer(抽象类, 手势) 1)UITapGestureRecognizer        // 点击 2)UIPinchGestureRecognizer        // 捏合  gestureRecognizer.scale            // 比例 3)UIRotationGestureRecognizer        // 旋转  [gestureRecognizer rotation]        // 弧度 4)UISwipeGestureRecognizer        // 滑动, 快速滑动, 用于监测滑动的方向  [swipe setDirection:UISwipeGestureRecognizerDirectionUp]    // 向上 5)UIPanGestureRecognizer        // 托移, 慢速移动, 用于监测偏移的量 6)UILongPressGestureRecognizer    // 长按 [A requireGestureRecognizerToFail: B]    // A手势满足条件, 不会立即触发, 等B手势确定失败后再触发A手势21.UIWebView NSURLRequest * request = [NSURLRequest requestWithURL: [NSURL URLWithString: ]];    // 新建一个request [webView loadRequest: request];    // 装载request webView.scalesPageToFit = YES;    // 自动适应到当前屏幕大小 [webView loadHTMLString: baseURL: nil]    // 装载本地HTML String// webView的各种状态都是通过delegate回调获得的  - (BOOL)webView: shouldStartLoadWithRequest: navigationType:    - (void)webViewDidStartLoad:(UIWebView *)webView;  - (void)webViewDidFinishLoad:(UIWebView *)webView;  - (void)webView:(UIWebView *)webView didFailLoadWithError: (NSError *)error;22.UITabBarController 高度为49, 视图控制器的height会从原来的460缩小到411, 每个选项卡都是相对独立的, 互不影响 viewController.title        // 设置TabBarController上的标题 viewController.tabBarItem.image        // 设置TabBarController上的图片 viewController.tabBarItem.badgeValue    // 设置选项卡微标 UITabBarItem * tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem: tag: ]    // 使用系统自带样式选项卡, 为了能得到选项卡标题, 还应该手动设置下title. tabBarController.viewControllers = array;    // 数组中存储各种视图控制器或导航控制器 tabBarController.selectedIndex        // 设置默认选中的选项卡 tabBarController.selectedViewController 一个TabBarController中包含两个子view (第一个子view用来显示状态栏, 导航控制器, 视图控制器等; 第二个子view为选项卡) 隐藏TabBarController时需要将第二个的子view的坐标移到屏幕外, 并将第一个view的高度改为480  tabBarController.view.subviews    // 选项卡控制器中的两个子视图 tabBarController.viewControllers    // 选项卡控制器中的所有控制器 tabBarController.delegate = self;        // 设置代理-(void) tabBarController: didSelectViewController:    // 点中选项卡后会触发此代理中的方法 -(void) tabBarController: didEndCustomizingViewControllers: changed:    // 编辑结束后触发此方法23.NSUserDefaults NSUserDefaults是一中本地存储机制, 保存的内容不会消失(下次打开看程序时还会出现), 用来存储一些如对程序的设置等小型数据,  能存储的数据类型: NSString, NSNumber, NSArray, NSDictionary, NSData, NSDate,  用法类似于字典, 整个程序中有且只有一个UserDefaults. [NSUserDefaults standardUserDefaults]        // 声明, 只能用这一种方法 [userDefaults setObject: forKey: ]        // 存储数据 [userDefaults synchronize]            // 同步给系统, 否则不能保存 [userDefaults objectForKey: ]            // 读取数据 [userDefaults removeObjectForKey: ]        // 清楚保存的值24.UIScrollView scrollView.contentSize    // 只有当contentSize大于frame时才可以滚动 scrollView.showsHorizontalScrollIndicator = NO;    // 隐藏横向滚动条 scrollView.showsVerticalScrollIndicator = NO;        // 隐藏纵向滚动条 scrollView.bounces = NO;    // 取消弹性机制 scrollView.scrollEnabled = YES;    // scrollView是否可以滚动 scrollView.pagingEnabled = YES;    // 设置按页翻滚, 一页的大小就是frame的大小 scrollView.contentOffset = point;    // 设置偏移量 [scrollView setContentOffset: animated: ]  scrollView.delegate = self;        //协议中的函数:  -(void) scrollViewWillBeginDragging:            // 开始拖拽的时候调用此函数  -(void) scrollViewDidScroll:                // 滚动中调用此函数  -(void) scrollViewDidEndDragging: willDecelerate:    // 结束拖拽的时候调用此函数  -(void) scrollViewWillBeginDecelerating:        // 开始减速的时候调用此函数  -(void) scrollViewDidEndDecelerating:            // 结束减速的时候调用此函数 设置scrollView缩放  1)加上scrollView的delegate  2)设置最大放大倍数和最小缩小倍数    scrollView.maximumZoomScale = 3.0;    scrollView.minimumZoomScale = 1.0;  3)实现协议中的放大缩小方法    -(UIView *) viewForZoomingInScrollView:      return [scrollView.subviews objectAtIndex: ];    // 放大缩小哪个view就返回哪个view  4)不用去考虑contentSize的变化, 系统会自动完成25.UITableView UITableView使用的都是协议中的方法,tableView.dataSource = self;    tableView.delegate = self; [tableView reloadData]    // 刷新表单 initWithFrame: style:UITableViewStylePlain        // 设置表单的样式, 还有一个Groupes -(NSInteger) numberOfSectionsInTableView:        // 返回tableView有几个分组(默认为1) -(CGFloat) tableView:    heightForHeaderInSection:    // 设置分组的头标高度(Section用来判断是哪个分组) -(CGFloat) tableView: heightForFooterInSection:    // 设置分组的脚标的高度 -(NSInteger) tableView: numberOfRowsInSection:    // 设置一个分组中有多少行 -(CGFloat) tableView: heightForRowAtIndexPath:    // 设置每个分组(indexPath.section)中每行(indexPath.row)的行高 -(UITableViewCell *) tableView: cellForRowAtIndexPath:    // 一行有一个Cell, 每出现一行就执行一次这个方法 {  static NSString * identifier = @"cell";        // 声明一个cell的标签, 使用static即只用声明一次, 之后不再释放  UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: identifier];    // 去cell复用池中找是否有对应标签的闲置cell, 如果找到就先手动清空原内容后再使用, 如果没有找到则实例化新的cell  if (cell == nil)  {      cell = [[[UITableViewCell alloc] initWithStyle: UITabViewCellStyleSubtitle reuseIdentifier: identifier] autorelease];    // 实例化新的cell, 并给cell打上标签  }  cell.textLabel.text        // 设置主标题          cell.detailTextLabel.text    // 设置副标题(只有在Subtitle风格下才可以显示)  cell.imageView.image        // 设置头像图片  cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton    // 设置cell右侧按钮, 只有这种模式有点击事件      (-(void) tableView: accessoryButtonTappedForRowWithIndexPath:    // 按钮的点击事件函数)  cell.selectionStyle = UITableViewCellSelectionStyleGray        // 设置cell整体被点击过后的样式 } // 自定义的cell要继承自UITableViewCell // cell本身是一个view, 在cell上面还有一个contentView, 自定义的各种控件要加在contentView上 -(NSString *) tableView: titleForHeaderInSection:    // 设置分组头标 -(NSString *) tableView: titleForFooterInSection:    // 设置分组脚标 -(void) setEditing: animated:    // TableView编辑模式, 有系统提供按钮(self.editButtonItem, 只能在导航栏上, 先调用父类的此方法, 再调用自己的此方法), 也可以自定义按钮(按钮事件中使用此方法) -(UITableViewCellEditingStyle) tableView: editingStyleForRowAtIndexPath:    // 设置对应的行是删除还是添加操作  -(void) tableView: commitEditingStyle: forRowAtIndexPath:    // 编辑下的添加, 删除    都是在数据源中操作, 添加或删除数据源, 之后再执行添加或删除动画, 刷新tableView界面  [tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject:indexPath] withRowAnimation: ]  [tableView insertRowsAtIndexPaths: [NSArray arrayWithObject:indexPath] withRowAnimation: ] -(void) tableView: moveRowAtIndexPath: toIndexPath:        // 移动行, 在数据源中删除对应项, 并插入对应项 -(void) tableView: didSelectRowAtIndexPath:            // 设置每一行点击  [tableView deselectRowAtIndexPath: indexPath animated: YES]    // 设置自动反选, (取消点击)  -(void) tableView: didDeselectRowAtIndexPath:        // 设置反选时, 触发的方法, 如果在点击中设置了自动反选, 则不会触发此方法【搜索栏】UISearchBar  tableView.tableHeaderView = searchBar        // 设置searchBar的frame后, 加入到tableHeaderView中【搜索控制器】UISearchDisplayController        // 搜索控制器在搜索的时候, 会自动生成一个tableView, 此时有多个tableView, 任一个tableView都会调用上面的方法, 至于是哪个tableView调用上面的方法, 需要自己判断      [[UISearchDisplayController alloc] initWithSearchBar: searchBar contentsController: self]    // 初始化, 不要释放  searchDisplayController.searchResultsDataSource = self;  searchDisplayController.searchResultsDelegate = self; -(NSArray *) sectionIndexTitlesForTableView:        // 设置一个索引条(用数组下标和section数进行一一对应, 而不是用文字)    搜索图标 UITableViewIndexSearch -(NSInteger) tableView: sectionForSectionIndexTitle: atIndex:    // 设置索引条对应关系      [tableView scrollRectToVisible: searchBar.frame animated: YES]; return index - 1;    // 带搜索图标的对应关系26.不同视图间的传值 1)从A --> B (B是A的一个成员变量)  a.定义一个B的属性, 使用属性进行传值 (最方便)  b.重载B的init方法, 增加一个传值的参数  c.使用NSUserDefaults  d.使用AppDelegate      因为AppDelegate是一个单例类, 即在整个程序中实例化的所有对象都是同一个对象, 所以可以在AppDelegate中定义一个属性, 用来在A中存值, 在B中使用.    AppDelegate的实例化方法: AppDelegate * appDelegate = [UIApplication sharedApplication].delegate; 2)从B --> A (B是A的成员变量, 值返回传送, 此时用代理更方便)  B是发送方, A是接收方; 因此在B中写协议的内容(发送方是接收方的成员变量), 并且在B中声明一个属性, 来持有这个协议, 并调用协议中的方法; A遵守此协议, 并写出B中属性的代理者为A本身(b.delegate = self)和协议中方法的实现.27.UIPickerView 用法类似于tableView, 也有两个协议,pickerView.dataSource = self;        pickerView.delegate = self; pickerView.showsSelectionIndicator = YES; -(NSInteger)numberOfComponentsInPickerView:    -(NSInteger)pickerView: numberOfRowsInComponent: -(NSString *)pickerView: titleForRow: forComponent:28.UIDatePicker datePicker.datePickerMode = UIDatePickerModeDateAndTime; (Time, Date, CountDownTimer)        // 四种样式29.UIAlertView initWithTitle: message: delegate: self cancelButtonTitle: @"Cancel" otherButtonTitles: @"OK", nil [alertView show]    // 显示通知 UIAlertViewStyle (PlainTextInput, SecureTextInput, LoginAndPasswordInput)    // 通知的输入框样式 [alertView buttonTitleAtIndex:]        // 得到按钮的title-(void) alertView: clickedButtonAtIndex:    // 处理点击的是那个按钮  -(void)alertViewCancel:  -(void)willPresentAlertView:  -(void)didPresentAlertView:  -(void)alertView: willDismissWithButtonIndex:  -(void)alertView: didDismissWithButtonIndex:  -(BOOL)alertViewShouldEnableFirstOtherButton:30.UIActionSheet initWithTitle: delegate:self cancelButtonTitle: destructiveButtonTitle: otherButtonTitles:, nil-(void)actionSheet: clickedButtonAtIndex:    -(void)actionSheetCancel:  -(void)willPresentActionSheet:  -(void)didPresentActionSheet:    -(void)actionSheet: willDismissWithButtonIndex:    -(void)actionSheet: didDismissWithButtonIndex:(NSInteger)buttonIndex;31.iPhone文件系统 1)Home目录的结构(NSString *) NSHomeDirectory(); 或 [NSBundle mainBundle]      MyApp.app    // 项目工程的目录              Documents    // 存储图像文档等由应用程序生成的数据            // [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Documents"]    // [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]      Library        // 存储程序的用户默认设置和其他状态信息        Caches        Preferences    tmp        // 存放临时文件, 重启iPhone时会丢失              // NSTemporaryDirectory();32.AVAudioPlayer 库文件AVFoundation.framework, 头文件[[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Burning" ofType:@"mp3"]] error:nil]        // 使用url只能播放本地文件, 使用data可以播放网络资源(但须一次性加载完, 不实用)

player.volume                // 设置音量, 在0到1之间

player.numberOfLoops = 2;        // 播放次数

player.currentTime = 15.0;        // 播放开始的时间

[player prepareToPlay]        // 加入播放队列, 一次只播放一首, 想同时播放多首, 要在不同的声道播放

[player play]

[player stop]

33.MPMoviePlayerController

库文件MediaPlayer.framework,

[[MPMoviePlayerController alloc] initWithContentURL: ]    // 这个url既可以播放本地也可以播放网络资源

moviePlayer.movieControlStyle = MPMovieControlModeDefault;    // 设置控制器样式

moviePlayer.scalingMode = MPMovieScalingModeAspectFit;    // 屏幕宽高比例

// MPMovieScalingModeNone            不做任何缩放

// MPMovieScalingModeAspectFit       适应屏幕大小,保持宽高比

// MPMovieScalingModeAspectFill      适应屏幕大小,保持宽高比,可裁剪

// MPMovieScalingModeFill            充满屏幕,不保持宽高比

[moviePlayer play];

[moviePlayer stop];

34.多语言环境

要添加需要的语言, 系统会根据所使用系统的语言, 自动使用对应的语言

1)系统自动生成两份XIB文件, 对应着中英文写内容

2)手动添加几份Strings File的文件, 对应着分别放入语言文件夹中, en.lproj或zh-Hans.lproj

文件以键值对的形式存在, "key" = "value";(不使用OC字符串, 以分号结尾)

NSLocalizedStringFromTable(@"key", @"fileName", nil);    // 调用时使用, 第一个参数为要获得的关键字, 第二个参数为关键字所在的文件的名字, 文件都是以".strings"结尾的

当文件名为NSLocalizable.strings时, 表示是系统缺省的名字, 使用方法NSLocalizedString(@"key", @"value");

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容