UIButton - iOS पर एक देशी "पल्स प्रभाव" एनीमेशन कैसे करें


89

मैं UIButton पर कुछ प्रकार की पल्स एनीमेशन (अनंत लूप "स्केल-इन-आउट") रखना चाहता हूं, ताकि इसे तुरंत उपयोगकर्ताओं का ध्यान आकर्षित हो।

मैंने इस लिंक को देखा -webkit- एनीमेशन - आउटवर्ड रिंग्स का उपयोग करके एक पल्स इफेक्ट कैसे बनाया जाए लेकिन मैं सोच रहा था कि क्या केवल मूल ढांचे का उपयोग करके ऐसा करने का कोई तरीका था?

जवाबों:


198
CABasicAnimation *theAnimation;

theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
theAnimation.duration=1.0;
theAnimation.repeatCount=HUGE_VALF;
theAnimation.autoreverses=YES;
theAnimation.fromValue=[NSNumber numberWithFloat:1.0];
theAnimation.toValue=[NSNumber numberWithFloat:0.0];
[theLayer addAnimation:theAnimation forKey:@"animateOpacity"]; //myButton.layer instead of

तीव्र

let pulseAnimation = CABasicAnimation(keyPath: #keyPath(CALayer.opacity))
pulseAnimation.duration = 1
pulseAnimation.fromValue = 0
pulseAnimation.toValue = 1
pulseAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
pulseAnimation.autoreverses = true
pulseAnimation.repeatCount = .greatestFiniteMagnitude
view.layer.add(pulseAnimation, forKey: "animateOpacity")

"एनिमेटेड परत सामग्री" लेख देखें


1
आपके उत्तर के लिए धन्यवाद! मुझे कहना है कि मैं थोड़ा अटक गया हूँ। मैं कैलेयर के साथ बिल्कुल भी परिचित नहीं हूं और मुझे यकीन नहीं है कि इसे मेरे यूआईब्यूटन के साथ कैसे जोड़ा जाए। इसके अलावा आपका कोड ऐसा लगता है कि यह अस्पष्टता बदल रहा है, पैमाना नहीं।
जोहान

8
ठीक है)। 'पल्स ऐनिमेटिंग' एक शब्द है जिसे आमतौर पर झिलमिलाहट प्रभाव के लिए लागू किया जाता है - जैसा कि उस लिंक में उदाहरण में कहा गया है। अब मैं आपके प्रश्न को पुनः पढ़ता हूँ और समझता हूँ कि आप क्या चाहते हैं। सबसे पहले, हर दृश्य की अपनी परत होती है। यदि QartzCore फ्रेमवर्क को प्रोजेक्ट में जोड़ा जाता है तो myView.layerइसे एक्सेस करने के लिए बस टाइप करें। आप कोर एनीमेशन के साथ परतों को चेतन कर सकते हैं। स्केल ट्रांसफॉर्मेशन के लिए आप इस दृष्टिकोण का उपयोग कर सकते हैं: स्ट्रक्चर फील्ड्स के लिए मुख्य पथ समर्थन
बेरिलियम

7
बहुत खुबस! @ "अपारदर्शिता" के बजाय @ "transform.scale" का उपयोग करना एक आकर्षण की तरह काम करता है। आपका बहुत बहुत धन्यवाद!
जोहान

2
यदि आपके पास पहले से यह नहीं है, तो आपको #import <QuartzCore/QuartzCore.h>क्लेयर की सभी परिभाषाएँ प्राप्त करने के लिए जोड़ना होगा।
progrmr

छी! जब तक आप वास्तविक आधुनिक संस्करण के वास्तविक उत्तर को अपडेट नहीं कर रहे, 3 साल पुराने उत्तर संपादित न करें। रिक्त स्थान जोड़ना इसे अपडेट नहीं कर रहा है। विशेष रूप से 3 साल बाद इसे फिर से जीवित करने के लिए नहीं।
फोगमिस्टर

30

यहाँ इसके लिए स्विफ्ट कोड है;)

let pulseAnimation:CABasicAnimation = CABasicAnimation(keyPath: "transform.scale")
pulseAnimation.duration = 1.0
pulseAnimation.toValue = NSNumber(value: 1.0)
pulseAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
pulseAnimation.autoreverses = true
pulseAnimation.repeatCount = .greatestFiniteMagnitude
self.view.layer.add(pulseAnimation, forKey: nil)

2
सभी अर्ध-कॉलनों के साथ क्या हो रहा है? ;)
ईसाई

@Christian अर्ध उपनिवेश पल्स के प्रकार को स्थिर करता है। यह उपयोग करने के लिए आवश्यक नहीं है, लेकिन यह कोड स्पष्टता को बढ़ाता है जब एक असाइनमेंट के दाहिने हाथ की तरफ यह स्पष्ट नहीं करता है कि यह किस प्रकार का कार्य करेगा।
स्कॉट चॉ

@ScottChow मुझे लगता है कि आप बृहदान्त्र के बारे में बात कर रहे हैं। मेरी टिप्पणी मूल उत्तर के लिए एक मजाक थी, क्योंकि स्विफ्ट के साथ अर्धविराम की कोई आवश्यकता नहीं है। लगता है कि यह अब स्पष्ट नहीं था जब जवाब बहुत संपादित किया गया है :)
ईसाई

9

स्विफ्ट कोड एक याद आ fromValueरहा है , मुझे इसे काम करने के लिए जोड़ना था।

pulseAnimation.fromValue = NSNumber(float: 0.0)

भी forKeyसेट किया जाना चाहिए, अन्यथाremoveAnimation काम नहीं करता है।

self.view.layer.addAnimation(pulseAnimation, forKey: "layerAnimation")

3
func animationScaleEffect(view:UIView,animationTime:Float)
{
    UIView.animateWithDuration(NSTimeInterval(animationTime), animations: {

        view.transform = CGAffineTransformMakeScale(0.6, 0.6)

        },completion:{completion in
            UIView.animateWithDuration(NSTimeInterval(animationTime), animations: { () -> Void in

                view.transform = CGAffineTransformMakeScale(1, 1)
            })
    })

}


@IBOutlet weak var perform: UIButton!

@IBAction func prefo(sender: AnyObject) {
    self.animationScaleEffect(perform, animationTime: 0.7)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.