Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
iOS 7: Òþ²ØµÄÌØÐԺͽâ¾öÖ®µÀ
 
×÷Õß Peter Steinberger£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-11-03
  3688  次浏览      29
 

µ± iOS7 ¸Õ·¢²¼µÄʱºò£¬È«ÊÀ½çµÄÆ»¹û¿ª·¢ÈËÔ±¶¼Á¢Âí³¢ÊÔ×ÅÈ¥±àÒëËûÃǵÄapp£¬½Ó×ÅÔÙ»¨ÉÏÊýÔµÄʱ¼äÀ´ÐÞ¸´ÈκγöÏֵĹÊÕÏ£¬ÉõÖÁÖØ×öapp¡£ÕâÑùµÄ½á¹û£¬Ê¹µÃÈËÃǸù±¾ÎÞϾȥ̽¾¿ iOS7 Ëù´øÀ´µÄж«Î÷¡£Ò»Ð©Ã÷ÏÔ¶øÏ¸Î¢µÄ¸üУ¬±ÈÈç˵[NSArray firstObject]£¬Õâ¸ö·½·¨¿É×·Ëݵ½ iOS4 ʱ´ú£¬ÏÖÔÚ±»ÌáΪ¹«ÓÐAPI£¬³ý´ËÖ®Í⣬»¹ÓкܶàÒþ²ØµÄÌØÐÔµÈ×ÅÎÒÃÇÈ¥ÍÚ¾ò¡£

ƽ»¬µ­Èëµ­³ö¶¯»­

ÎÒÕâÀïÒªÌÖÂ۵IJ¢·Çеĵ¯ÐÔ¶¯»­APIs »òÕß UIDynamics£¬¶øÊÇһЩ¸üϸ΢µÄ¶«Î÷¡£CALayerÔö¼ÓÁËÁ½¸öз½·¨£ºallowsGroupOpacityºÍallowsEdgeAntialiasing¡£ÏÖÔÚ£¬×鲻͸Ã÷¶È(group opacity)²»ÔÙÊÇʲôÐÂÏʵĶ«Î÷ÁË¡£iOS»á¶à´ÎʹÓôæÔÚÓÚ Info.plist ÖеļüUIViewGroupOpacity²¢¿ÉÔÚÓ¦ÓóÌÐò·¶Î§ÄÚÆôÓûò½ûÓÃËü¡£¶ÔÓÚ´ó¶àÊýapps¶øÑÔ£¬Õ⣨Òë×¢£ºÆôÓ㩲¢·ÇËùÆÚÍûµÄ£¬ÒòΪËü»á½µµÍÕûÌåÐÔÄÜ¡£ÔÚ iOS7 ÖУ¬Óà SDK7 ËùÁ´½ÓµÄ³ÌÐò£¬ÕâÏîÊôÐÔĬÈÏÊÇÆôÓõġ£µ±Ëü±»ÆôÓÃʱ£¬Ò»Ð©¶¯»­½«»á±äµÃ²»Á÷³©£¬ËüÒ²¿ÉÒÔÔÚlayer²ãÉϱ»¿ØÖÆ¡£

Ò»¸öÓÐȤµÄϸ½Ú£¬Èç¹ûallowsGroupOpacityÆôÓõϰ£¬_UIBackdropView£¨ÔÚUIToolbar»òÕßUIPopoverViewÖеı³¾°ÊÓͼ£©²»ÄÜ¶ÔÆäÄ£ºý½øÐж¯»­´¦Àí£¬ËùÒÔµ±Äã×öÒ»¸öalphaת»»Ê±£¬Äã¿ÉÄÜ»áÁÙʱ½ûÓÃÕâÏîÊôÐÔ¡£ÒòΪÕâ»á½µµÍ¶¯»­ÌåÑ飬Äã¿ÉÒÔ»ØÍ˵½¾ÉµÄ·½Ê½È»ºóÔÚ¶¯»­ÆÚ¼äÁÙʱÆôÓÃshouldRasterize¡£±ðÍüÁËÉèÖÃÊʵ±µÄrasterizationScale£¬·ñÔòÔÚretinaµÄÉ豸ÉÏÕâЩÊÓͼ»á³É¾â³Ý×´¡£

Èç¹ûÄãÏëÒª¸´ÖÆµÄ Safari ÏÔʾËùÓÐÑ¡ÏʱµÄ¶¯»­£¬ÄÇô±ßÔµ¿¹¾â³ÝÊôÐÔ½«±äµÃ·Ç³£ÓÐÓá£

×èÈû¶¯»­

Ò»¸öСµ«·Ç³£ÓÐÓõÄз½·¨[UIView performWithoutAnimation:]¡£ËüÊÇÒ»¸ö¼òµ¥µÄ·â×°£¬Ïȼì²é¶¯»­µ±Ç°ÊÇ·ñÆôÓã¬È»ºó½ûÖ¹¶¯»­£¬Ö´ÐпéÓï¾ä£¬×îºóÖØÐÂÆôÓö¯»­¡£Ò»¸öÐèҪ˵Ã÷µÄµØ·½ÊÇ£¬Ëü²¢²»»á×èÈû»ùÓÚ CoreAnimation µÄ¶¯»­¡£Òò´Ë£¬²»Óü±ÓÚ½«ÄãµÄ·½·¨µ÷Óôӣº

[CATransaction begin];
[CATransaction setDisableActions:YES];
view.frame = CGRectMake(...);
[CATransaction commit];

Ìæ»»Îª£º

[UIView performWithoutAnimation:^{
view.frame = CGRectMake(...);
}];

µ«ÊÇ£¬¾ø´ó¶àÊýÇé¿öÏÂÕâÑùÒ²Äܹ¤×÷µÄºÜºÃ£¬Ö»ÒªÄã²»Ö±½Ó´¦ÀíCALayers¡£

iOS7 ÖУ¬ÎÒÓкܶà´úÂë·¾¶£¨Ö÷ÒªÊÇ UITableViewCells£©ÐèÒª¶îÍâµÄ±£»¤£¬·ÀÖ¹ÒâÍâµÄ¶¯»­£¬ÀýÈ磬Èç¹ûÒ»¸öµ¯´°µÄ´óСµ÷ÕûÁË£¬ÄÇôͬʱÏÔʾÖеıíÊÓͼ½«ÒòΪ¸ß¶ÈµÄ±ä»¯¶ø¼ÓÔØÐµÄcell¡£ÎÒͨ³£µÄ×ö·¨Êǽ«Õû¸ö layoutSubviews µÄ´úÂë°üÔúµ½Ò»¸ö¶¯»­¿éÖУº

- (void)layoutSubviews
{
// Otherwise the popover animation could leak into our cells on iOS 7 legacy mode.
[UIView performWithoutAnimation:^{
[super layoutSubviews];
_renderView.frame = self.bounds;
}];
}

´¦Àí³¤±íÊÓͼ

UITableView ·Ç³£¿ìËÙ¸ßЧ£¬³ý·ÇÄ㿪ʼʹÓÃtableView:heightForRowAtIndexPath:£¬Ëü»á¿ªÊ¼ÎªÄã±íÖÐÈÎÒâÔªËØµ÷Óô˷½·¨£¬¼´±ãûÓпÉÊÓ¶ÔÏ󣬾ͱÈÈçÆäÄÚÔÚµÄUIScrollViewÖ»ÊÇÈ¥»ñÈ¡ÕýÈ·µÄcontentSize¡£´ËǰÓÐһЩ±äͨ·½·¨£¬µ«¶¼²»ºÃÓá£iOS7 ÖУ¬Æ»¹û¹«Ë¾ÖÕÓÚ³ÐÈÏÕâÒ»ÎÊÌ⣬²¢Ìí¼ÓtableView:estimatedHeightForRowAtIndexPath:£¬Õâ¸ö·½·¨ÑÓ³ÙÁËʵ¼Ê¹ö¶¯Ê±¼ä³É±¾µÄ´ó²¿·Ö¡£Èç¹ûÄã²»ÖªµÀÒ»¸öcellµÄ´óС£¬·µ»ØUITableViewAutomaticDimension¼´¿É¡£

¶ÔÓÚ½ÚÍ·/⣨section headers/footers£©£¬ÏÖÔÚÒ²ÓÐÀàËÆµÄAPIÁË¡£

UISearchDisplayController

Æ»¹ûµÄ search controller ʹÓÃÁËеļ¼ÇÉÀ´¼ò»¯Òƶ¯ search bar µ½ navigation bar µÄ¹ý³Ì¡£ÆôÓà displaysSearchBarInNavigationBar ¾Í¿ÉÒÔÁË£¨³ý·ÇÄ㻹ҪÓõ½ scope bar£¬ÎÒÖ»ÄÜ˵ÄãÕæ²»ÐÒ£©¡£ÎÒµ¹ÊǺÜϲ»¶Õâô×ö£¬µ«±È½ÏÒź¶µÄÊÇ£¬iOS7 É쵀 UISearchDisplayController Ã²ËÆ±»´Ý²ÐµÄ±È½ÏÑÏÖØ£¬ÓÈÆäÊÇiPad¡£Æ»¹û¹«Ë¾¿´ÉÏÈ¥ÏñÊÇûʱ¼ä´¦ÀíÕâ¸öÎÊÌâµÄÑù×Ó£¨Ô­ÎÄ£ºApple seems to have run out of time£©£¬¶ÔÓÚÏÔʾµÄËÑË÷½á¹û²¢²»»áÒþ²ØÊµ¼ÊµÄ±íÊÓͼ¡£ÔÚ iOS7 ֮ǰ£¬ÕⲢûÓÐÎÊÌ⣬µ«ÊÇÏÖÔÚ searchResultsTableView ÓÐÒ»¸ö͸Ã÷µÄ±³¾°É«£¬Ê¹Ëü¿´ÉÏÈ¥Ï൱Ôã¸â¡£×÷ΪһÖÖ±äͨ·½·¨£¬Äã¿ÉÒÔÉèÖò»Í¸Ã÷É«»òÕßÈ¡µÀÓÚ¸»ÓÚ¼¼ÇɵÄÊÖ¶ÎÀ´»ñµÃÄãËùÆÚÍûµÄ¡£¹ØÓÚÕâ¸ö¿Ø¼þ»á³öÏÖ¸÷ÖÖ¸÷ÑùµÄ½á¹û£¬µ±Ê¹ÓÃdisplaysSearchBarInNavigationBarʱÉõÖÁ²»»áչʾËÑË÷±íÊÓͼ¡£

ÄãµÄ½á¹û¿ÉÄÜÓÐËù²»Í¬£¬µ«ÎÒÊÇʹÓÃÁËһЩÊÖ¶ÎÀ´ÈÃdisplaysSearchBarInNavigationBar¹¤×÷µÄ£º

- (void)restoreOriginalTableView
{
if (PSPDFIsUIKitFlatMode() && self.originalTableView) {
self.view = self.originalTableView;
}
}

- (UITableView *)tableView
{
return self.originalTableView ?: [super tableView];
}

- (void)searchDisplayController:(UISearchDisplayController *)controller
didShowSearchResultsTableView:(UITableView *)tableView
{
// HACK: iOS 7 requires a cruel workaround to show the search table view.
if (PSPDFIsUIKitFlatMode()) {
if (!self.originalTableView) self.originalTableView = self.tableView;
self.view = controller.searchResultsTableView;
controller.searchResultsTableView.contentInset = UIEdgeInsetsZero; // Remove 64 pixel gap
}
}

- (void)searchDisplayController:(UISearchDisplayController *)controller
didHideSearchResultsTableView:(UITableView *)tableView
{
[self restoreOriginalTableView];
}

ÕâÀ±ðÍüÁËÔÚviewWillDisappearÖе÷ÓÃrestoreOriginalTableView£¬·ñÔò»á·¢ËÍcrash¡£

¼ÇסÕâÊÇΨһµÄ½â¾ö°ì·¨£»¿ÉÄÜÓв»ÉÙ¼¤½øµÄ·½·¨²»Ìæ»»ÊÓͼ±¾Éí£¬µ«Õâ¸öÎÊÌâȷʵӦ¸ÃÓÉÆ»¹û¹«Ë¾À´ÐÞ¸´¡££¨TODO: RADAR!£©

·ÖÒ³

UIWebView ʹÓÃÁËеļ¼ÇÉÀ´×Ô¶¯·ÖÒ³´øpaginationModeµÄÍøÕ¾¡£ÓÐÒ»´ó¶ÑÓë´Ë¹¦ÄÜÏà¹ØµÄÐÂÊôÐÔ£º

@property (nonatomic) UIWebPaginationMode paginationMode NS_AVAILABLE_IOS(7_0);
@property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode NS_AVAILABLE_IOS(7_0);
@property (nonatomic) CGFloat pageLength NS_AVAILABLE_IOS(7_0);
@property (nonatomic) CGFloat gapBetweenPages NS_AVAILABLE_IOS(7_0);
@property (nonatomic, readonly) NSUInteger pageCount NS_AVAILABLE_IOS(7_0);

ÏÖÔÚ¶øÑÔ£¬ËäÈ»Õâ¿ÉÄܲ¢·Ç¶ÔÓÚ´ó¶àÊýÍøÕ¾¶¼ÓÐÓ㬵«Ëü¿Ï¶¨ÊÇÉú³É¼òµ¥µÄµç×ÓÊéÔĶÁÆ÷»òÏÔʾÎı¾µÄÒ»ÖÖ¸üºÃµÄ·½Ê½¡£¼ÓµãÀÖ×ӵϰ£¬Çë³¢ÊÔ½«ËüÉèÖÃΪUIWebPaginationModeBottomToTop¡£

»á·ÉµÄ Popovers

ÏëÖªµÀΪʲôÄãµÄpopovers·èÁËÒ»Ñùµ½´¦ÂÒ·É£¿ÔÚUIPopoverControllerDelegateЭÒéÖÐÓÐÒ»¸öеĴúÀí·½·¨Ê¹ÄãÄÜ¿ØÖÆËü£º

-     (void)popoverController:(UIPopoverController *)popoverController
willRepositionPopoverToRect:(inout CGRect *)rect
inView:(inout UIView **)view

µ±popoverêµãÊÇÖ¸ÏòÒ»¸öUIBarButtonItemʱ£¬UIPopoverController»áÓÐһЩ¶¯×÷£¬µ«Èç¹ûÄãÈÃËüÔÚÒ»¸öview»òÕßrectÖÐÏÔʾ£¬Äã¿ÉÄܾÍÐèҪʵÏÖ´Ë·½·¨²¢Õý³£·µ»Ø¡£Ò»¸ö»¨·ÑÁËÎÒÏ൱³¤µÄʱ¼äÀ´ÑéÖ¤µÄÎÊÌ⡪¡ªÈç¹ûÄãͨ¹ý¸Ä±äpreferredContentSizeÀ´¶¯Ì¬µ÷ÕûÄãµÄpopovers£¬ÄÇôÕâ¸ö·½·¨¾ÍÌØ±ðÒªÇóµÃÒÔʵÏÖ¡£Æ»¹û¹«Ë¾ÏÖÔڶԸıäpopovers´óСµÄÇëÇó¸üÑϸñ£¬Èç¹ûûÓÐÔ¤Áô×ã¹»µÄ¿Õ¼ä£¬popover½«»áµ½´¦Òƶ¯¡£

¼üÅÌÖ§³Ö

Æ»¹û¹«Ë¾²»Ö»ÎªÎÒÃÇÌṩÁËȫеÄframeworkÓÃÓÚÓÎÏ·¿ØÖÆÆ÷£¬ËüÒ²¸øÁËÎÒÃÇÕâЩ¼üÅ̰®ºÃÕßһЩÌáʾ£¡Äã»á·¢ÏÖж¨ÒåµÄ¹«ÓüüÏñ UIKeyInputEscape »ò UIKeyInputUpArrow£¬¿ÉÒÔʹÓÃËùÓÐÐ嵀 UIKeyCommand Àà½Ø²é¡£ÔÚ iOS7 ֮ǰ£¬Ö»ÄÜͨ¹ýһЩÄÑÒÔÑÔ±íµÄÊÖ¶ÎÀ´´¦Àí¼üÅÌÃüÁÏÖÔÚ£¬¾ÍÈÃÎÒÃÇ²ÙÆðÀ¶ÑÀ¼üÅÌÊÔÊÔ¿´ÎÒÃÇÄÜÓÃÕâ¸ö×öʲô£¡

¿ªÊ¼Ö®Ç°£¬ÄãÐèÒª¶ÔÔðÈÎÕßÁ´ÓиöÁ˽⡣ÄãµÄ UIApplication ¼Ì³Ð×Ô UIResponder£¬UIView ºÍ UIViewController Ò²ÊÇÈç´Ë¡£Èç¹ûÄã´¦Àí¹ý UIMenuItem ²¢ÇÒûÓÐʹÓÃÎҵĻùÓÚ¿éµÄ°ü×°µÄ»°£¬ÄÇôÄãÒѾ­Á˽âÁËÕâЩ¡£Ê¼þÏȱ»·¢Ë͵½×îÉϲãµÄÏìÓ¦Õߣ¬È»ºóÒ»¼¶¼¶ÍùÏ´«µÝÖ±µ½ UIApplication ¡£ÎªÁ˲¶»ñ°´¼üÃüÁÄãÐèÒª¸æËßϵͳÄã¹ØÐÄÄÄЩ¼üÃüÁ¶ø²»ÊÇÈ«²¶»ñ£©¡£ÎªÁËÍê³ÉÕâ¸ö£¬ÄãÐèÒªÖØÐ´keyCommandsÕâ¸öÐÂÊôÐÔ£º

- (NSArray *)keyCommands
{
return @[[UIKeyCommand keyCommandWithInput:@"f"
modifierFlags:UIKeyModifierCommand
action:@selector(searchKeyPressed:)]];
}

- (void)searchKeyPressed:(UIKeyCommand *)keyCommand
{
// Respond to the event
}

ÏÖÔڿɱðÌ«¼¤¶¯£¬ÐèҪעÒâµÄÊÇ£¬Õâ¸ö·½·¨Ö»ÔÚ¼üÅ̿ɼûʱÓÐЧ£¨±ÈÈçÓÐÀàËÆ UITextView ÕâÑùµÄ¶ÔÏó×÷ΪµÚÒ»ÏìÓ¦Õßʱ£©¡£¶ÔÓÚÈ«¾ÖÈȼü£¬ÄãÈÔÈ»ÐèÒªÓÃÉÏÃæµÄ·½·¨¡£³ýÈ´ÄÇЩ£¬Õâ¸ö·¾¶»¹ÊǺÜÓÅÑŵġ£²»Òª¸²¸ÇÀàËÆ cmd-V ϵͳµÄ¿ì½Ý¼ü£¬Ëü»á±»×Ô¶¯Ó³ÉäΪճÌù¹¦ÄÜ¡£

»¹ÓÐһЩеÄÔ¤¶¨ÒåµÄÏìÓ¦ÐÐΪÈ磺

- (void)increaseSize:(id)sender NS_AVAILABLE_IOS(7_0);
- (void)decreaseSize:(id)sender NS_AVAILABLE_IOS(7_0);

ËüÃÇ·Ö±ð¶ÔÓ¦×Å cmd+ ºÍ cmd- ÃüÁÓÃÀ´·Å´ó/ËõСÄÚÈÝ¡£

Æ¥Åä¼üÅ̱³¾°

Æ»¹û¹«Ë¾ÖÕÓÚ¹«¿ªÁË UIInputView£¬ÆäÖÐÌṩÁËÒ»ÖÖ·½Ê½¡ª¡ªÊ¹ÓÃUIInputViewStyleKeyboardÀ´Æ¥Åä¼üÅÌÑùʽ¡£ÕâʹµÃÄã¿ÉÒÔ±àд×Ô¶¨ÒåµÄ¼üÅÌ»òÕß´øÄ¬ÈÏÑùʽµÄĬÈϼüÅÌÀ©Õ¹£¨¹¤¾ßÌõ£©¡£Õâ¸öÀàÒÔǰ¾Í´æÔÚÁË£¬²»¹ýÏÖÔÚÎÒÃÇÖÕÓÚ¿ÉÒÔÈÆ¹ý˽ÓÐAPIµÄ·½Ê½À´Ê¹ÓÃËüÁË¡£

Èç¹û UIInputView ÊÇÒ»¸ö inputView »òÕß inputAccessoryView µÄ¸ùÊÓͼ£¬Ëü½«Ö»ÏÔʾһ¸ö±³¾°£¬·ñÔòËü½«ÊÇ͸Ã÷µÄ¡£Òź¶µÄÊÇ£¬Õâ²¢²»ÄÜÈÃÄãʵÏÖÒ»¸öδÌî³äµÄ·ÖÀë̬µÄ¼üÅÌ£¬µ«ËüÈÔÈ»±ÈÓÃÒ»¸ö¼òµ¥µÄ UIToolbar ÒªºÃ¡£ÎÒ»¹Ã»¿´µ½Æ»¹ûÔںδ¦Ê¹ÓÃÕâ¸öÐÂAPI£¬Ã²ËÆËüÖ»×÷Ϊһ¸ö UIToolbar ʹÓÃÔÚ Safari ÉÏ¡£

Á˽âÄãµÄÍøÂç

ËäÈ»ÔçÔÚ iOS4 µÄʱºò£¬¹ØÓÚÍøÂçÐÅÏ¢µÄ´ó²¿·ÖÒѾ­ÔÚ CTTelephony ±©Â¶ÁË£¬µ«Ëüͨ³£Ö»ÓÃÓÚÌØ¶¨³¡¾°²¢·ÇÊ®·ÖÓÐÓá£iOS7 ÖУ¬Æ»¹û¹«Ë¾ÎªÆäÌí¼ÓÁËÒ»¸ö·½·¨£¬ÆäÖÐ×îÓÐÓõģºcurrentRadioAccessTechnology¡£Õâ¸öʹÄãÄÜÖªÏþÊÖ»úÊÇ´¦ÓÚ½ÏÂýµÄGPRS»¹ÊǸßËÙµÄLTE»òÕß½éÓÚÆäÖС£Ä¿Ç°»¹Ã»Óз½·¨µÃµ½Á¬½ÓËÙ¶È£¨µ±È»ÊÖ»ú±¾ÉíÒ²ÎÞ·¨»ñÈ¡Õâ¸ö£©£¬µ«ÊÇÕâ×ãÒÔÓÃÀ´ÓÅ»¯Ò»¸öÏÂÔØ¹ÜÀíÆ÷£¬ÈÃÆäÔÚEDGEϲ»Óó¢ÊÔͬʱȥÏÂÔØ6ÕÅͼƬÁË¡£

ÏÖÔÚ»¹Ã»ÓÐcurrentRadioAccessTechnologyµÄÏà¹ØÎĵµ£¬Òò´Ë´æÔÚһЩ²»Õý¹æ»òÕß´íÎóµÄÓ÷¨¡£µ±ÄãÏëÒª»ñÈ¡µ±Ç°ÍøÂçÐźÅÖµ£¬ÄãÓ¦µ±×¢²áÒ»¸öCTRadioAccessTechnologyDidChangeNotification֪ͨ¶ø²»Ó¦¸ÃÈ¥ÂÖѯÕâ¸öÊôÐÔ¡£ÎªÁË»ñÈ¡ÕâЩ֪ͨ£¬ÄãÐèҪʹÓÃCTTelephonyNetworkInfoµÄÒ»¸öʵÀý£¬×¢Òâ²»ÒªÔÚ֪ͨÖд´½¨ CTTelephonyNetworkInfo µÄʵÀý£¬·ñÔò»á crash¡£

ÔÚÕâ¸ö¼òµ¥µÄÀý×ÓÖУ¬ÎÒÔÚblockÖв¶»ñ²¢³ÖÓÐÁË telephonyInfo£¬´ó¼Ò¿ÉÒÔºöÂÔÕâ¸ö£º

CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
NSLog(@"Current Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);
[NSNotificationCenter.defaultCenter addObserverForName:CTRadioAccessTechnologyDidChangeNotification
object:nil
queue:nil
usingBlock:^(NSNotification *note)
{
NSLog(@"New Radio Access Technology: %@", telephonyInfo.currentRadioAccessTechnology);
}];

µ±ÊÖ»ú´Óedge»·¾³µ½3G£¬logÊä³öÓ¦¸ÃÏñÕâÑù£º

iOS7Tests[612:60b] Current Radio Access Technology: CTRadioAccessTechnologyEdge
iOS7Tests[612:1803] New Radio Access Technology: (null)
iOS7Tests[612:1803] New Radio Access Technology: CTRadioAccessTechnologyHSDPA

Æ»¹ûµ¼³öÁËËùÓÐ×Ö·û´®·ûºÅ£¬Òò´Ë¿ÉÒԺܼòµ¥µÄ±È½ÏºÍ¼ì²âµ±Ç°µÄÍøÂçÐÅÏ¢¡£

Core Foundation ºÍ Autorelease

Core FoundationÖгöÏÖÁËÒ»¸öÐµķ½·¨£¬Ëü±»ÓÃÓÚ˽Óе÷ÓÃÒÑÓÐÊýÄêʱ¼ä£º

CFTypeRef CFAutorelease(CFTypeRef CF_RELEASES_ARGUMENT arg)

Ëüȷʵ×öÁËÄãËùÆÚÍûµÄÊ£¬ÈÃÈ˷ѽâµÄÊÇÆ»¹û»¨ÁËÕâô³¤Ê±¼ä²Å°ÑËü¹«¿ª¡£ARC Ï£¬´ó¶àÊýÈËÔÚ´¦Àí·µ»Ø Core Foundation ¶ÔÏóʱÊÇͨ¹ýת»»³É¶ÔµÈµÄ NS ¶ÔÏóÀ´Íê³ÉµÄ£¬Èç NSDictionary,¼´±ãËüÖ»ÊÇÒ»¸ö CFDictionaryRef È»ºó¼òµ¥µØ CFBridgingRelease() ¡£ÕâÑùͨ³£Ã»ÎÊÌ⣬³ý·ÇÄã·µ»ØµÄ¶ÔµÈ NS ¶ÔÏ󲻿ÉÓÃʱ£¬Èç CFBagRef¡£ÄãҪôʹÓà id£¬ÕâÑù»áʧȥÀàÐͰ²È«ÐÔ£¬ÒªÃ´Ä㽫ÄãµÄ·½·¨ÖØÃüÃûΪ createMethod ²¢¿¼ÂÇËùÓеÄÄÚ´æÓïÒ壬×îºóʹÓà CFRelease¡£»¹ÓÐһЩÊֶΣ¬±ÈÈçÕâ¸ö£¬Óà non-ARC-file ±êǩȻºó±àÒ룬µ«ÖÕ¹éµÃʹÓÃCFAutorelease()¡£ÁíÍ⣺²»Òª±àдʹÓÃÆ»¹û¹«Ë¾ÃüÃû¿Õ¼äµÄ´úÂ룬ËùÓÐÕâЩ×Ô¶¨ÒåµÄ CF-ºê½«À´¶¼»á±»´òÆÆµÄ¡£

ͼƬ½âѹËõ

µ±Í¨¹ý UIImage չʾһÕÅͼʱ£¬ÔÚÏÔʾ֮ǰÐèÒª½âѹËõ£¨³ý·ÇÔ´ÒѾ­ÏñËØ»º´æÁË£©¡£¶ÔÓÚ JPG/PNG ÎļþÕâ»áÕ¼ÓÃÏ൱¿É¹ÛµÄʱ¼ä²¢»áÔì³É¿¨¶Ù¡£iOS6 ÒÔǰ£¬Í¨³£ÊÇ´´½¨Ò»¸öλͼÉÏÏÂÎÄ£¬È»ºóÔÚÆäÖл­Í¼À´½â¾ö¡££¨²Î¼û AFNetworking ÈçºÎ´¦Àí£©¡£

iOS7 ¿ªÊ¼£¬Äã¿ÉÒÔʹÓÃkCGImageSourceShouldCacheImmediately:À´Ç¿ÖÆÍ¼Æ¬ÔÚ´´½¨Ê±Á¢¼´½âѹËõ£º

+ (UIImage *)decompressedImageWithData:(NSData *)data
{
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
CGImageRef cgImage = CGImageSourceCreateImageAtIndex(source, 0, (__bridge CFDictionaryRef)@{(id)kCGImageSourceShouldCacheImmediately: @YES});

UIImage *image = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);
CFRelease(source);
return image;
}

µ±ÎÒ¸Õ·¢ÏÖÕâÒ»µãʱȷʵºÜÐË·Ü£¬µ«ÊÂʵ²¢·ÇÈç´Ë¡£ÔÚÎҵIJâÊÔÖУ¬·¢ÏÖµ±¿ªÆôÁ˼´Ê±»º´æºóÐÔÄÜÓÐÃ÷ÏԵĽµµÍ¡£ÒªÃ´Õâ¸ö·½·¨ÊÇÔÚÖ÷Ïß³ÌÖе÷Óõ썲»Ì«¿ÉÄÜ£©£¬¸Ð¾õÉÏÐÔÄܸüÔ㣬ÒòΪËüÔÚ·½·¨copyImageBlockSetJPEGÖÐËø×¡ÁË£¬¶øÍ¬Ê±ÔÚÖ÷Ïß³ÌÖÐÔÚÏÔʾ·Ç¼ÓÃܵÄͼƬËùÖ¡£ÔÚÎҵijÌÐòÖУ¬ÎÒÔÚÖ÷Ïß³ÌÖмÓÔØÐ¡µÄÔ¤ÀÀͼ£¬ÔÚºǫ́Ïß³ÌÖмÓÔØ´óÐÍͼ£¬Ê¹ÓÃÁËkCGImageSourceShouldCacheImmediatelyºóССµÄ½âѹËõ×èÈûÁËÖ÷Ị̈߳¬Í¬Ê±ÔÚºǫ́´¦Àí´óÁ¿¿ªÏú°º¹óµÄ²Ù×÷¡£

»¹Óиü¶à¹ØÓÚͼƬ½âѹËõÏà¹ØµÄÈ´²»ÊÇ iOS7 ÖеÄж«Î÷£¬ÏñkCGImageSourceShouldCache£¬ËüÓÃÀ´¿ØÖÆÏµÍ³×Ô¶¯Ð¶ÔؽâѹËõµÄͼƬÊý¾ÝµÄÄÜÁ¦¡£È·±£Ä㽫ËüÉèÖÃΪYES£¬·ñÔòËùÓеŤ×÷¶¼½«Ã»ÓÐÒâÒå¡£ÓÐȤµÄÊÇ£¬Æ»¹ûÔÚ64bitÔËÐÐʱµÄϵͳÖн«kCGImageSourceShouldCacheµÄĬÈÏÖµ´Ó NO ¸ÄΪÁË YES¡£

µÁ°æ¼ì²é

Æ»¹ûÌí¼ÓÁËÒ»¸ö·½Ê½£¬Í¨¹ý NSBunble ÉϵÄз½·¨appStoreReceiptURLÀ´ÆÀ¹ÀLionϵͳÉÏ App Store µÄÊվݣ¬Í¬Ê±Ò²½«ÆäÒÆÖ²µ½ÁË iOS ÉÏ¡£ÕâʹµÃÄã¿ÉÒÔ¼ì²éÄãµÄÓ¦ÓÃÊÇÔÚ±»ºÏ·¨¹ºÂò»òÕßÒѾ­±»ÆÆ½âÁË¡£¼ì²éÊվݻ¹ÓÐÒ»¸öÖØÒªµÄÔ­Òò£¬Ëü°üº¬Á˳õʼ¹ºÂòÈÕÆÚ£¬Õâµã¶ÔÓÚ°ÑÄãµÄÓ¦ÓôӸ¶·ÑÄ£ÐÍÇ¨ÒÆµ½Ãâ·Ñ+Ó¦ÓÃÄÚ¸¶·Ñ·½Ê½ºÜÓаïÖúÒâÒå¡£Äã¿ÉÒÔ¸ù¾ÝÕâ¸ö³õʼ¹ºÂòÈÕÆÚÀ´¾ö¶¨¶îÍâÄÚÈݶÔÓÚÄãµÄÓû§ÊÇÃâ·ÑµÄ»¹ÊÇÊշѵġ£

Êվݻ¹ÔÊÐíÄã¼ì²éÓ¦ÓóÌÐòÊÇ·ñͨ¹ýÅúÁ¿¹ºÂò¼Æ»®¹ºÂòÒÔ¼°¸ÃÐí¿ÉÖ¤ÊÇ·ñÈÔÓÐЧ£¬ÓÐÒ»¸öÃûΪSKReceiptPropertyIsVolumePurchaseµÄÊôÐÔÏÔʾÁ˸ÃÖµ¡£

µ±Äãµ÷ÓÃappStoreReceiptURLʱ£¬ÄãÐèÒªÌØ±ð×¢Ò⣬ÒòΪÔÚ iOS6 ÉÏ£¬Ëü»¹ÊÇÒ»¸ö˽ÓÐAPI£¬ÄãÓ¦¸ÃÔÚÓû§´úÂëÖÐÏȵ÷ÓÃdoesNotRecognizeSelector:£¬ÔÚµ÷ÓÃǰ¼ì²éÔËÐУ¨»ù´¡£©°æ±¾¡£ÔÚ¿ª·¢ÆÚ¼ä£¬Õâ¸ö·½·¨·µ»ØµÄ URL ²»»áÊÇÖ¸ÏòÒ»¸öÎļþ¡£Äã¿ÉÄÜÐèҪʹÓà StoreKit µÄSKReceiptRefreshRequest£¬ÕâÒ²ÊÇ iOS7 ÖеÄж«Î÷£¬ÓÃËüÀ´ÏÂÔØÖ¤Ê顣ʹÓÃÒ»¸öÖÁÉÙ¹ºÂò¹ýÒ»´ÎµÄ²âÊÔÓû§£¬·ñÔòËü½«Ã»·¨¹¤×÷£º

// Refresh the Receipt
SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] init];
[request setDelegate:self];
[request start];

ÑéÖ¤ÊÕ¾ÝÐèÒª´óÁ¿µÄ´úÂë¡£ÄãÐèҪʹÓÃOpenSSLºÍÄÚǶµÄÆ»¹û¸ùÖ¤Ê飬²¢ÇÒÄ㻹ҪÁ˽âһЩ»ù±¾µÄ¶«Î÷ÏñÊÇÖ¤Êé¡¢PCKSÈÝÆ÷ÒÔ¼°ASN.1¡£ÕâÀïÓÐһЩÑùÀý´úÂ룬µ«ÊÇÄã²»Ó¦¸ÃÈÃËüÕâô¼òµ¥¡ª¡ª±ðÖ»ÊÇ¿½±´ÏÖÓеÄÑéÖ¤·½·¨£¬ÖÁÉÙ×öµãÐ޸ĻòÕß±àдÄã×Ô¼ºµÄ£¬ÄãÓ¦¸Ã²»Ï£ÍûÒ»¸öÆÕͨµÄ²¹¶¡³ÌÐò¾ÍÄÜÔÚÊýÃëÄÚÍß½âÄãµÄŬÁ¦°É¡£

Äã¾ø¶ÔÓ¦¸Ã¶Á¶ÁÆ»¹ûµÄÖ¸ÄÏ¡ª¡ªÑéÖ¤ Mac App É̵êÊվݣ¬ÕâÀïÃæµÄ´ó¶àÊý¶¼ÊÊÓÃÓÚ iOS¡£Æ»¹ûÔÚ WWDC2013 µÄ Session308 ¡°Using Receipts to Protect Your Digital Sales¡± ÖÐÏêÊöÁË¡°Grand Unified Receipt¡±µÄ±ä¶¯¡£

Comic Sans MS

iOS7 ÖУ¬ÖÕÓÚÓ­»ØÁË Comic Sans MS¡£ÏÖÔÚ£¬ËüÒÔ¿ÉÏÂÔØµÄ×ÖÌå±»Ìí¼Óµ½ iOS6 ÖУ¬µ«µ±Ê±µÄ×ÖÌåÁбíºÜÉÙÒ²²»¼ûµÃ¶àôÓÐȤ¡£ÔÚ iOS7 ÖÐÆ»¹ûÌí¼ÓÁ˲»ÉÙ×ÖÌ壬°üÀ¨¡°famous¡±£¬ËüºÍ PT Sans »ò Comic Sans MS ÓÐЩÀàËÆ¡£kCTFontDownloadableAttribute²¢Ã»ÓÐÔÚ iOS6 ÖÐÉùÃ÷£¬ËùÒÔ iOS7 ÒÔǰËü²¢²»ÕæÕý¿ÉÓ㬵«Æ»¹ûÈ·ÊÇÔÚ iOS6 µÄʱºò¾ÍÒѾ­×öÁË˽ÓÐÉùÃ÷ÁË¡£

×ÖÌåÁбíÊǶ¯Ì¬±ä»¯µÄ£¬ÒÔºó¿ÉÄܾͻᷢÉú±ä¶¯¡£Æ»¹ûÔÚ Tech Note HT5484 ÖÐÂÞÁÐÁËһЩ¿ÉÓõÄ×ÖÌ壬µ«Õâ¸öÎĵµÒѾ­¹ýʱÁË£¬Í¬Ê±Ò²²»ÄÜ·´Ó³ iOS7 µÄ±ä»¯¡£

ÕâÀïÏÔʾÁËÄã¸ÃÈçºÎ»ñȡһ¸öÓÃCTFontDescriptorRef±êʾ¿ÉÏÂÔØµÄ×ÖÌåÊý×飺

CFDictionary *descriptorOptions = @{(id)kCTFontDownloadableAttribute : @YES};
CTFontDescriptorRef descriptor = CTFontDescriptorCreateWithAttributes((CFDictionaryRef)descriptorOptions);
CFArrayRef fontDescriptors = CTFontDescriptorCreateMatchingFontDescriptors(descriptor, NULL);

ϵͳ²»»á¼ì²é×ÖÌåÊÇ·ñÒÑ´æÔÚÓÚ´ÅÅÌÉ϶ø½«Ö±½Ó·µ»ØÍ¬ÑùµÄÁÐ±í¡£ÁíÍ⣬Õâ¸ö·½·¨¿ÉÄÜ»áÆôÓÃÍøÂç²¢Ôì³É×èÈû£¬Äã²»Ó¦¸ÃÔÚÖ÷Ïß³ÌÖÐʹÓÃËü¡£

ʹÓÃÈçÏ»ùÓÚ¿éµÄ API À´ÏÂÔØ×ÖÌ壺

bool CTFontDescriptorMatchFontDescriptorsWithProgressHandler(
CFArrayRef descriptors,
CFSetRef mandatoryAttributes,
CTFontDescriptorProgressHandler progressBlock)

Õâ¸ö·½·¨ÄܲÙ×÷ÍøÂç²¢´«µÝÏÂÔØ½ø¶ÈÐÅÏ¢À´µ÷ÓÃÄãµÄprogressBlock·½·¨Ö±µ½ÏÂÔØ³É¹¦»òÕßʧ°Ü¡£²Î¿¼Æ»¹ûµÄ DownloadFont ÑùÀý¿´ÈçºÎʹÓÃËü¡£

ÓÐһЩֵµÃ×¢ÒâµÄµØ·½£¬ÕâÀïµÄ×ÖÌåÖ»ÔÚµ±Ç°³ÌÐòÖÜÆÚÄÚÓÐЧ£¬Ï´ÎÔËÐн«±»ÖØÐÂÔØÈëÄÚ´æ¡£ÒòΪ×ÖÌå´æ·ÅÔÚ¹²Ïí¿Õ¼äÖУ¬Äã²»ÄÜÒÀÀµÓÚËüÃÇÊÇ·ñ¿ÉÓ᣺ÜÓпÉÄÜÒ²²»Äܱ£Ö¤µÄ˵£¬ÏµÍ³»áÇåÀíÕâ¸öĿ¼£¬»òÕßÄãµÄ³ÌÐò±»¿½±´µ½ÐµÄÉ豸»·¾³ÖУ¬¶øÕâʱÓÖûÓÐÕâ¸ö×ÖÌå´æÔÚ£¬Í¬Ê±µ±Ç°´¦ÓÚûÓÐÍøÂçµÄ»·¾³ÖС£ÔÚ Mac »òÊÇÄ£ÄâÆ÷ÉÏ£¬ÄãÄܸù¾ÝkCTFontURLAttribute»ñµÃ×ÖÌåµÄ¾ø¶Ô·¾¶£¬¼ÓÔØËÙ¶ÈÒ²»áÌáÉý£¬µ«ÊÇÔÚ iOS ÉÏÊDz»¿ÉÄܵģ¬ÒòΪÕâ¸öĿ¼ÔÚÄã³ÌÐòÖ®Í⣬ÄãÐèÒªÔٴε÷ÓÃCTFontDescriptorMatchFontDescriptorsWithProgressHandler¡£

ÄãÒ²¿ÉÒÔ×¢²áеÄkCTFontManagerRegisteredFontsChangedNotification֪ͨÀ´¸ú×ÙÐÂ×ÖÌåÔÚºÎÊ±ÔØÈëµ½ÁË×ÖÌå×¢²á±íÖС£Äã¿ÉÒÔÔÚ WWDC2013 µÄ Session223 ¡°Using Fonts with TextKit¡±ÖвéÕÒ¸ü¶àÐÅÏ¢¡£

Õ⻹²»¹»£¿

û¹ØÏµ£¬iOS7 µÄж«Î÷Ô¶²»Ö¹Èç´Ë£¡Á˽âһϠNSHipster Ä㽫Ã÷°×ÓïÒôºÏ³ÉÏà¹ØµÄ¶«Î÷£¬base64¡¢NSURLComponents¡¢NSProgress¡¢bar codes¡¢reading lists ÒÔ¼° CIDetectorEyeBlink¡£»¹ÓкܶàÎÒÃÇûÓк­¸Çµ½µÄ£¬±ÈÈçÆ»¹û iOS7 µÄ API ±ä»¯£¬iOS Ö¸ÄϵÄж«Î÷ÒÔ¼° Foundation Release Notes£¨ÕâЩ¶¼ÊÇ·þÎñÓÚ OS XµÄ£¬µ«ÊÇ´úÂë¶¼Êǹ²ÏíµÄ£¬Ò²Í¬ÑùÊÊÓÃÓÚ iOS£©¡£ºÜ¶à·½·¨¶¼»¹Ã»ÐγÉÎĵµ£¬µÈ×ÅÄãÀ´Ì½¾¿ºÍ blog¡£

   
3688 ´Îä¯ÀÀ       29
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ