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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
CALayer¶¯»­Êµ¼ù£¨¶þ£©£ºCAReplicatorLayerµÄÓ÷¨
 
×÷Õߣº¸¶ÓîÐù À´Ô´£ºCSDN ·¢²¼ÓÚ£º 2015-09-11
  4160  次浏览      28
 

ÕªÒª£º±¾ÎÄΪCALayer AnimationϵÁеڶþƪ¡£ÔÚÒÔʵսµÄ·½Ê½¶ÔCALayer¶¯»­½øÐÐÁ˳õ²½µÄ½éÉÜ£¬Ïê½âCALayerÊÇÈçºÎÈö¯»­Á鶯ÆðÀ´Ö®ºó£¬×÷Õß¼ÌÐøÒÔʾÀý½²½âÁ˸ü¶àCALayer¶¯»­µÄ֪ʶ£¬Ö÷ҪΪCAReplicatorLayerµÄÓ÷¨¡£

ÉÏһƪÎÄÕÂͨ¹ýÁ½¸ö¶¯»­Ê¾Àý´ø´ó¼ÒÁ˽âºÍÈÏʶÁËCALayer¶¯»­£¬°üÀ¨ÈçºÎʹÓÃCAShapeLayer¡¢CABasicAnimation¡¢CAAnimationGroupµÈ¡£ÔÚÕâÆªÎÄÕÂÖУ¬ÒÀÈ»»áͨ¹ýÁ½¸öʾÀýÏò´ó¼Ò½²½â¸ü¶àCALayer¶¯»­µÄ֪ʶ¡£

ÀÏ¹æ¾Ø£¬ÏÈÈÃÎÒÃÇ¿´¿´×îÖÕҪʵÏֵ͝»­Ð§¹û£º

¾­³£ÌýÒôÀÖµÄÈ˶ԵÚÒ»¸ö¶¯»­Ð§¹û¿Ï¶¨Óлá¾õµÃºÜÑÛÊ죬ÀàËÆ²¥·ÅÒôÀÖʱÒôƵ¸ßµÍÆð·üµÄ¶¯»­£¬ÕâÖÖ¶¯»­ÔÚÓ¦ÓÃÖг£±»ÓÃ×÷±êʶÕýÔÚ²¥·ÅÒôÀÖ»ò¹ã²¥¡£µÚ¶þ¸ö¶¯»­ÒÀÈ»ÊÇÒ»¸öµÈ´ý¼ÓÔØµÄ¶¯»­£¬ÔÚÎÒµÄÓ¡ÏóÖп϶¨ÊÇÓÐÓ¦ÓÃʹÓùý£¬¾ßÌåµÄÒѾ­¼Ç²»ÇåÁË¡£ÏÂÃæ¾ÍÈÃÎÒÃÇÀ´ÊµÏÖÕâÁ½¸ö¶¯»­°É¡£

Replicator Animation

н¨Ò»¸öÏîÄ¿£¬ÃûΪReplicatorAnimation£¬´ò¿ªMain.storyboard£¬Ìí¼ÓÒ»¸öUIView£¬ÑÕɫλÖð´´ó¼ÒϲºÃÉ趨£º

Ìí¼Ó¸ÃUIViewÔÚViewController.swiftÖеÄOutlet£º

½ÓÏÂÀ´ÎÒÃÇÔÚViewController.swiftÖÐÌí¼ÓÒ»¸ö·½·¨firstReplicatorAnimation()£¬Ôڸ÷½·¨ÖбàдÈçÏ´úÂ룺

let replicatorLayer = CAReplicatorLayer()  
replicatorLayer.bounds =
CGRect(x: replicatorAnimationView.frame.origin.x,
y: replicatorAnimationView.frame.origin.y,
width: replicatorAnimationView.frame.size.width,
height: replicatorAnimationView.frame.size.height)
replicatorLayer.anchorPoint = CGPoint(x: 0, y: 0)
replicatorLayer.backgroundColor = UIColor.lightGrayColor().CGColor
replicatorAnimationView.layer.addSublayer(replicatorLayer)

ÕâÀï³öÏÖµÄCAReplicatorLayerÊÇÒ»¸öÐÂÃæ¿×£¬ËüÒ²ÊÇCALayerµÄ×ÓÀ࣬ÕýÈçËüµÄÃû³ÆÒ»Ñù£¬CAReplicatorLayer¿ÉÒÔ¶ÔËü×Ô¼ºµÄ×ÓLayer½øÐи´ÖƲÙ×÷¡£´´½¨ÁËCAReplicatorLayerʵÀýºó£¬ÉèÖÃÁËËüµÄ³ß´ç´óС¡¢Î»Öá¢ÃªµãλÖᢱ³¾°É«£¬²¢ÇÒ½«ËüÌí¼Óµ½ÁËreplicatorAnimationViewµÄLayerÖÐ:

ÕâÀïÒª†ªà¼¸¾ä£¬LayerµÄĬÈÏêµã×ø±êÊÇ(0.5, 0.5)£¬Ò²¾ÍÊÇLayerµÄÖÐÐĵãλÖ㬶øLayerµÄpositionÓÖÊǸù¾Ýêµã¼ÆËãµÄ£¬ËùÒÔÈç¹ûÄãÉèÖÃLayerµÄpositionÊôÐÔΪ(10, 10)£¬¾ÍÏ൱ÓÚÉèÖÃÁËLayerµÄÖÐÐÄλÖÃΪ(10, 10)£¬²¢²»ÊÇÄãÆÚÍûµÄ×óÉϽÇλÖá£ËùÒÔÈç¹ûLayerÏëʹÓÃËü¸¸ÊÓͼµÄ×ø±êλÖ㬾ÍÐèÒª½«ÃªµãλÖÃÉèÖÃΪ(0, 0)£¬ÕâÑùÒ»À´LayerµÄpositionÊôÐÔ±êʶµÄ¾ÍÊÇLayer×óÉϽǵÄλÖãº

È»ºóÎÒÃǼÌÐøÔÚfirstReplicatorAnimation()·½·¨ÖÐÌí¼Ó´úÂ룺

let rectangle = CALayer()  
rectangle.bounds =
CGRect(x: 0, y: 0, width: 30, height: 90)
rectangle.anchorPoint = CGPoint(x: 0, y: 0)
rectangle.position = CGPoint(x: replicatorAnimationView.frame.origin.x + 10,
y: replicatorAnimationView.frame.origin.y + 110)
rectangle.cornerRadius = 2
rectangle.backgroundColor = UIColor.whiteColor().CGColor
replicatorLayer.addSublayer(rectangle)

ͨ¹ýÉÏÃæµÄ´úÂ룬Ôٴδ´½¨ÁËÒ»¸öLayer£¬Õâ´ÎʹÓõÄÊÇCALayer£¬ÒòΪÎÒÃÇÖ»ÐèÒªÒ»¸öºÜÆÕͨµÄLayer£¬ÎªÆäÉèÖÃλÖᢳߴ硢±³¾°É«¡¢Ô²½ÇÊôÐÔ£¬È»ºóÌí¼ÓÔÚreplicatorLayerÖУº

¶¯»­µÄÖ÷ÌåÖ®Ò»ÒѾ­»æÖƺÃÁË£¬ÏÂÃæÎÒÃÇÈÃËü¶¯ÆðÀ´¡£ÔÚÉÏÊö´úÂëºóÃæ£¬½Ó×ÅÌí¼ÓÈçÏ´úÂ룺

let moveRectangle = CABasicAnimation(keyPath: "position.y")  
moveRectangle.toValue = rectangle.position.y - 70
moveRectangle.duration = 0.7
moveRectangle.autoreverses = true
moveRectangle.repeatCount = HUGE
rectangle.addAnimation(moveRectangle, forKey: nil)

Ê×ÏÈÎÒÃÇ´´½¨Á˰´YÖáÒÆ¶¯µÄ¶¯»­ÊµÀý£¬È»ºóÉèÖÃÁËÒÆ¶¯µÄÄ¿±êλÖ㬶¯»­³ÖÐøÊ±¼ä£¬Öظ´´ÎÊýÉèÖÃΪÎÞÏÞ´ó¡£ÕâÀïÓÐÒ»¸öÊôÐÔ´ó¼Ò¿ÉÄܱȽÏİÉú£¬ÄǾÍÊÇautoreverses£¬Õâ¸öÊôÐÔΪBoolÀàÐÍ£¬ÉèÖÃΪtrueʱ£¬¿ªÆô×Ô¶¯·´ÏòÖ´Ðж¯»­£¬±ÈÈçʾÀýÖеİ×É«³¤·½ÐεÄÒÆ¶¯¶¯»­ÎªÏòÉÏÒÆ¶¯50¸öÏñËØ£¬Èç¹ýautoreversesÉèÖÃΪfalse£¬ÄÇô¶¯»­½áÊøºó£¬»á¸ù¾ÝÖØ¸´´ÎÊý£¬°×É«³¤·½ÐÎÖØÐ»ص½³õʼλÖ㬼ÌÐøÏòÉÏÒÆ¶¯£¬Èç¹ûautoreversesÉèÖÃΪtrue£¬Ôòµ±¶¯»­½áÊøºó£¬°×É«³¤·½Ðλá¼ÌÐøÏòÏÂÒÆ¶¯ÖÁ³õʼλÖã¬È»ºóÔÙ¿ªÊ¼µÚ¶þ´ÎµÄÏòÉÏÒÆ¶¯¶¯»­¡£

±àÒëÔËÐп´¿´Ð§¹û£º

ÖÁ´Ë£¬´ó¼ÒÓ¦¸ÃÒ²ÒѾ­¿´³öÀ´ÁË£¬Õâ¸ö°×É«µÄ³¤·½ÐξÍÊǶ¯»­ÖеÚÒ»¸öÉÏÏÂÒÆ¶¯µÄ°×É«³¤·½ÐΣ¬ÄÇôºóÁ½¸öÈçºÎ´´½¨ÄØ£¿»¹ÐèÒªÔÙдÁ½±éÉÏÃæµÄ´úÂëÂð£¿Çë´ó¼ÒÔÚÏÂÃæµÄÎÄÕÂÖÐѰÕҴ𰸡£

ÔÚÉÏÊö´úÂëÏÂÃæÔÙÌí¼ÓÒ»ÐдúÂ룺

replicatorLayer.instanceCount = 3  

ÏÔ¶øÒ×¼û£¬ÕâÊÇCAReplicatorLayerµÄÄÜÁ¦ÁË£¬ÕâÐдúÂëµÄÒâ˼Êǽ«replicatorLayerµÄ×ÓLayer¸´ÖÆ3·Ý£¬¸´ÖÆLayerÓëÔ­LayerµÄ´óС¡¢Î»Öá¢ÑÕÉ«¡¢LayerÉϵ͝»­µÈµÈËùÓÐÊôÐÔ¶¼Ò»Ä£Ò»Ñù£¬ËùÒÔÕâʱ±àÒëÔËÐдúÂëÎÒÃÇ¿´²»µ½Èκβ»Í¬µÄЧ¹û£¬ÒòΪÈý¸ö°×É«³¤·½ÐÎÊÇÖØºÏÔÚÒ»ÆðµÄ£¬ËùÒÔÎÒÃÇÐèÒªÉèÖÃÿ¸ö°×É«³¤·½Ðεļä¸ô£º

replicatorLayer.instanceTransform = CATransform3DMakeTranslation(40, 0, 0) 

ÕâÐдúÂëÉæ¼°µ½CAReplicatorLayerµÄÁíÒ»¸öÊôÐÔinstanceTransform£¬ËüµÄ×÷ÓÃÊÇÉèÖÃÿ¸ö×ÓLayerÈçºÎ±ä»¯¡£CATransform3DMakeTranslationÕâ¸öÀàµÄº¬ÒåÊÇʹLayer¸ù¾ÝX¡¢Y¡¢ZÖá½øÐÐÆ½ÒÆ¡£ÏÖÔÚÔÙ±àÒëÔËÐп´¿´Ð§¹ûÈçºÎ£º

ÏÖÔÚÈý¸ö°×É«³¤·½ÐεÄÔ˶¯¹ì¼£ºÍʱ¿Ì¶¼ÊÇÒ»Ö±µÄ£¬ÕâÏÔÈ»²»ÊÇÎÒÃÇÏëÒªµÄ½á¹û£¬ÎÒÃÇÐèÒªÈý¸ö°×É«³¤·½ÐÎÓÐÉÏÏÂÆð·üµÄÊÓ¾õЧ¹û£¬ËùÒÔÎÒÃǼÌÐøÌí¼ÓÒ»ÐдúÂ룺

replicatorLayer.instanceDelay = 0.3  

instanceDelayÕâ¸öÊôÐÔʹCAReplicatorLayerÖеÄÿ¸ö×ÓLayerµÄ¶¯»­Æðʼʱ¼äÖð¸öµÝÔö¡£ÕâÀïÎÒÃÇÉèÖÃΪ0.3Ã룬Ҳ¾ÍÊǵÚÒ»¸ö³¤·½ÐÎÏÈÖ´Ðж¯»­£¬¹ý0.3ÃëºóµÚ¶þ¸ö¿ªÊ¼Ö´Ðж¯»­£¬ÔÙ¹ý0.3ÃëºóµÚÈý¸ö¿ªÊ¼Ö´Ðж¯»­¡£ÎÒÃDZàÒëÔËÐп´¿´Ð§¹û£º

ÏÔÈ»ÎÒÃÇÖ»ÏëÏÔʾreplicatorLayerÇøÓòÀïµÄÄÚÈÝ£¬ÎÒÃDz¢²»Ïë¿´µ½³¬³öËü±ß½çµÄÄÚÈÝ£¬ËùÒÔÎÒÃÇÔÙÌí¼ÓÒ»ÐдúÂ룺

replicatorLayer.masksToBounds = true  

masksToBoundsÊÇCALayerµÄÊôÐÔ£¬×÷ÓÃÊǽ«LayerÊÓΪһ¸öÕÚÕÖ£¬Ö»ÏÔʾÕÚÕÖÇøÓòÄÚµÄÄÚÈÝ¡£×îºóÎÒÃǻص½³õʼ»¯replicatorLayerµÄµØ·½£¬ÕÒµ½ÕâÐдúÂëreplicatorLayer.backgroundColor = UIColor.lightGrayColor().CGColor£¬½«replicatorLayerµÄ±³¾°É«¸ÄΪÎÞÉ«replicatorLayer.backgroundColor = UIColor.clearColor().CGColor¡£ÔٴαàÒëÔËÐп´¿´×îÖÕЧ¹û£º

Replicator Indicator Animation

CAReplicatorLayerµÄ¹¦ÄÜÊǺÜÇ¿´óµÄ£¬ÕâÒ»½Ú½«Í¨¹ýÁíÒ»¸ö¼ÓÔØ¶¯»­µÄʵÀýÏò´ó¼Ò½éÉÜËüµÄÆäËûÌØÐÔ¡£

Ê×ÏÈ´ò¿ªMain.storyboard£¬ÍϽøÒ»¸öеÄUIView£¬Î»ÖÃÑÕÉ«Ëæ´ó¼ÒϲºÃ£º

ËæºóÌí¼Ó¸ÃUIViewÔÚViewController.swiftÖеÄOutlet activityIndicatorView£º

È»ºóÔÚViewController.swiftÖÐÌí¼ÓÒ»¸ö·½·¨activityIndicatorAnimation£¬ºÍÉÏÒ»¸ö¶¯»­Ê¾ÀýÒ»Ñù£¬ÎÒÃÇÏÈ´´½¨Ò»¸öCAReplicatorLayer£º

let replicatorLayer = CAReplicatorLayer()  
replicatorLayer.bounds = CGRect(x: 0, y: 0,
width: activityIndicatorView.frame.size.width,
height: activityIndicatorView.frame.size.height)
replicatorLayer.position = CGPoint(x: activityIndicatorView.frame.size.width/2,
y: activityIndicatorView.frame.size.height/2)
replicatorLayer.backgroundColor = UIColor.lightGrayColor().CGColor
activityIndicatorView.layer.addSublayer(replicatorLayer)

ÉÏÊö´úÂëºÍÉϸöʾÀýÖеIJ¶à£¬Î¨Ò»²»Í¬µÄ¾ÍÊÇreplicatorLayerµÄêµãʹÓõÄÊÇĬÈÏÖµ£¬¼´Ãªµã¾ÍÊÇÖе㣬positionÊôÐÔ´ú±íÒàÊÇÖе㣬ËùÒÔ½«positionÊôÐÔÉèÖÃΪ¸¸ÊÓͼµÄÖе㼴¿É¡£ÕâÀïÒâÔÚÈôó¼Ò¶à¶àÀí½âCALayerÖÐanchorPointÓëpositionÊôÐÔ¡£½ÓÏÂÀ´Ìí¼ÓÈçÏ´úÂ룺

let circle = CALayer()  
circle.bounds = CGRect(x: 0, y: 0, width: 15, height: 15)
circle.position = CGPoint(x: activityIndicatorView.frame.size.width/2,
y: activityIndicatorView.frame.size.height/2 - 55)
circle.cornerRadius = 7.5
circle.backgroundColor = UIColor.whiteColor().CGColor
replicatorLayer.addSublayer(circle)

ÉÏÊö´úÂëµÄÄ¿µÄÊÇÓÃCALayer´´½¨Ò»¸öÔ²ÐΣ¬ÆäʵCALayer´´½¨³öµÄÐÎ״ĬÈÏÊǾØÐΣ¬µ«ÊǰÑËĸö½ÇµÄ»¡¶ÈÉèÖÃΪ±ß¿íµÄÒ»°ë£¬¾ØÐξͱä³ÉÁËÔ²ÐΡ£½«Õâ¸öÔ²ÐεÄλÖÃÉèÖÃÔÚ¸¸LayerµÄÖм俿ÉÏλÖ㬱³¾°É«ÉèÖÃΪ°×É«¡£´Ëʱ¸ÃÔ²ÐξÍÊÇÎÄÕ¿ªÍ·Ð§¹ûͼÖеڶþ¸ö¶¯»­ÀïµÄÖ÷ÌåÁË£º

²»¹ýÔÚ¶¯»­ÖÐÎÒÃÇ¿´µ½ÓÐÐí¶à¸öСԲÐÎ×é³ÉÒ»¸ö´óÔ²£¬Èç¹ûÖØ¸´ÉÏÃæµÄ´úÂ룬һ¸öÒ»¸öÉèÖÃλÖã¬ÄǾø¶ÔÊÇÁîÈË·¢Ö¸µÄÐÐΪ£¬ºÃÔÚÎÒÃÇÓÐCAReplicatorLayer°ïÖúÎÒÃÇʵÏÖ£¬ÏÂÃæ¾ÍÀ´¿´¿´ÈçºÎʹÓÃCAReplicatorLayer¸´ÖÆ×ÓLayer£¬²¢ÈÃ×ÓLayerÐγÉÒ»¸öÔ²ÐΡ£ÈÃÎÒÃǽÓ×ÅÌí¼ÓÈçÏ´úÂ룺

replicatorLayer.instanceCount = 15  
let angle = CGFloat(2 * M_PI) / CGFloat(15)
replicatorLayer.instanceTransform = CATransform3DMakeRotation(angle, 0, 0, 1)

replicatorLayer.instanceTransform = CATransform3DMakeRotation(angle, 0, 0, 1)
ÉÏÊöµÄ´úÂëÖУ¬Ê×ÏȶÔ×ÓLayer£¬Ò²¾ÍÊǰ×ɫԲÐθ´ÖÆÁË15·Ý¡£È»ºó½«360¡ã³ýÒÔ15·Ý£¬Ëã³öÿһ¸öÔ²ÐÎÕë¶ÔËüǰһ¸öÔ²ÐÎÓ¦¸ÃÆ«ÒÆµÄ½Ç¶È¡£×îºóÎÒÃÇÓõ½ÁËCATransform3DMakeRotation£¬ËüͬÑùÊÇCATransform3DµÄÒ»¸ö½á¹¹£¬º¬ÒåÊÇʹLayerÔÚX¡¢Y¡¢ZÖá¸ù¾Ý¸ø¶¨µÄ½Ç¶ÈÐýת¡£ÕâÑùÎÒÃǸ´ÖƵÄ15·ÝÔ²ÐξͻᰴÕÕÎÒÃǼÆËãµÄ½Ç¶ÈÅÅÁУ¬²¢ÐγÉÒ»¸ö´óÔ²£º

½ÓÏÂÀ´ÈÃÎÒÃÇ·ÖÎöÒ»ÏÂÕâ¸ö¶¯»­£¬ÕûÌå¿´ÉÏÈ¥¸Ð¾õÏñÒ»¿ÅÁ÷ÐÇÍÏ×Åβ°ÍÔÚ²»Í£µÄתȦ£¬µ«Ï¸¿´Ã¿Ò»¸öСԲµã£¬ÆäʵÊÇÔÚ²»Í£µÄ½øÐзŴóËõСµÄ¶¯»­£¬Ö»²»¹ýÿ¸öСԲµãµÄ¶¯»­¶ÔÓÚËüǰһ¸öСԲµãµÄ¶¯»­ÓÐÒ»¶¨µÄÑÓ³Ù¡£ËùÒÔÊ×ÏÈÎÒÃÇÐèҪʵÏÖСԲµã·Å´óËõСµÄ¶¯»­£¬ÔÚÉÏÊö´úÂëºóÃæ½Ó×ÅÌí¼ÓÈçÏ´úÂ룺

let scale = CABasicAnimation(keyPath: "transform.scale")  
scale.fromValue = 1
scale.toValue = 0.1
scale.duration = 1
scale.repeatCount = HUGE
circle.addAnimation(scale, forKey: nil)

Ê×ÏÈ´´½¨Ò»¸ö°´±ÈÀýËõ·ÅÀàÐ͵͝»­£¬ÉèÖÃÆðʼ±ÈÀýΪ1£¬Ò²¾ÍÊǵ±Ç°´óС¡£ÔÙÉèÖÃÏ£ÍûËõ·Åµ½µÄ±ÈÀýΪ0.1¡£¶¯»­³ÖÐøÊ±¼äΪ1Ãë£¬ÖØ¸´ÎÞÏ޴Ρ£×îºó½«¸Ã¶¯»­Ìí¼ÓÔÚСԲµãÖС£±àÒëÔËÐп´¿´Ð§¹û£º

Ŀǰÿ¸öСԲµãÊÇͬʱִÐж¯»­£¬ÎÒÃÇÐèÒªÉèÖÃСԲµãµÄ¶¯»­ÑÓ³Ùʱ¼ä£¬½Ó×ÅÌí¼ÓÈçÏ´úÂ룺

replicatorLayer.instanceDelay = 1/15  

ÕâÀïΪʲôÊÇ1/15ÄØ£¬ÒòΪÕû¸ö¶¯»­µÄʱ¼äÊÇÓÉÿ¸öСԲµãµÄ¶¯»­Ê±¼ä¾ö¶¨µÄ£¬ÕâÀïÒ²¾ÍÊÇ1Ã룬ËùÓÐСԲµãµÄÑÓ³Ùʱ¼ä¼ÓÆðÀ´ÒªµÈÓÚÕû¸ö¶¯»­µÄ³ÖÐøÊ±¼ä£¬ËùÒÔÕâÀï¾ÍÊÇÓÃ1Ãë³ýÒÔСԲµãµÄÊýÁ¿15¡£±àÒëÔËÐп´¿´Ð§¹û£º

´ÓЧ¹ûͼÖпÉÒÔ¿´µ½£¬¸Õ¿ªÊ¼µÄ¶¯»­²»ÊǺÜ×ÔÈ»£¬ÄÇÊÇÒòΪСԲµãµÄ³õʼ±ÈÀýÊÇ1£¬ËùÒÔÒ»¿ªÊ¼»áÏÈ¿´µ½Ð¡Ô²µã£¬È»ºó²Å»áÂýÂý¿ªÊ¼Õý³£µÄ¶¯»­¡£Õâ¸öÎÊÌâºÜºÃ½â¾ö£¬ÎÒÃÇÈÃСԲµãµÄ³õʼ±ÈÀýΪ0.1£¬Ò²¾ÍÊǸտªÊ¼¿´²»µ½Ð¡Ô²µã£¬ÕâÑù¾Í¿ÉÒÔ±ÜÃâÕâ¸öÇé¿öÁË£¬ÎÒÃǽÓ׿ÓÒ»ÐдúÂ룺

circle.transform = CATransform3DMakeScale(0.01, 0.01, 0.01)  

ͬʱ½«replicatorLayerµÄ±³¾°É«¸ÄΪÎÞÉ«£¬ÔٴαàÒëÔËÐп´¿´Ð§¹û£º

Õ¹ÏÖÔÚÎÒÃÇÑÛǰµÄÊÇÒ»¸öÍêÃÀµÄ¼ÓÔØ¶¯»­¡£

×ܽá

½ñÌìÖ÷Òª¸ø´ó¼Ò½éÉÜÁËCAReplicatorLayerµÄÓ÷¨£¬´ó¼ÒÁìÎòÆäºËÐŦÄܸ´ÖÆ¡¢ÑÓ³ÙºóÒ²¿ÉÒÔ³¢ÊÔʵÏÖÆäËûÓÐȤµÄ¶¯»­Ð§¹û¡£ÏÂÆªÎÄÕÂÎÒ»áÏò´ó¼Ò½éÉÜCALayerÁíÒ»¸ö×ÓÀàµÄÓ÷¨£¬¾´ÇëÆÚ´ý°É¡£

   
4160 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶Ë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ÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ