ÕªÒª£º±¾ÎÄΪ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ÁíÒ»¸ö×ÓÀàµÄÓ÷¨£¬¾´ÇëÆÚ´ý°É¡£ |