মাইকের উত্তর দারুণ! এটি করার আরেকটি দুর্দান্ত এবং সহজ উপায় হ'ল সেটরেক্টস ডিসপ্লে () এর সাথে মিলিত ড্রআরেক্ট ব্যবহার করুন। এটি অচল মনে হচ্ছে তবে এটি নয় :-)
আমরা শীর্ষ থেকে শুরু করে একটি বৃত্ত আঁকতে চাই, যা -90 ° এবং শেষ হয় 270 ° এ ° প্রদত্ত ব্যাসার্ধ সহ বৃত্তের কেন্দ্র (সেন্টার এক্স, সেন্টারওয়াই) Y কারেন্টএঙ্গল হল বৃত্তের শেষ-পয়েন্টের বর্তমান কোণ, মিনএঙ্গেল (-90) থেকে সর্বোচ্চআঙ্গেল (270) এ যাচ্ছে।
// MARK: Properties
let centerX:CGFloat = 55
let centerY:CGFloat = 55
let radius:CGFloat = 50
var currentAngle:Float = -90
let minAngle:Float = -90
let maxAngle:Float = 270
ড্রয়ারেক্টে, আমরা নির্দিষ্ট করেছিলাম যে বৃত্তটি কীভাবে প্রদর্শিত হবে:
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
let path = CGPathCreateMutable()
CGPathAddArc(path, nil, centerX, centerY, radius, CGFloat(GLKMathDegreesToRadians(minAngle)), CGFloat(GLKMathDegreesToRadians(currentAngle)), false)
CGContextAddPath(context, path)
CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
CGContextSetLineWidth(context, 3)
CGContextStrokePath(context)
}
সমস্যাটি এখনই এটি হ'ল কারেন্টএঙ্গল যেমন পরিবর্তন হচ্ছে না তেমনি বৃত্তটি স্থিতিশীল, এমনকি কারেন্টএঙ্গল = মিনিআঙ্গল হিসাবেও দেখাবে না।
তারপরে আমরা একটি টাইমার তৈরি করি এবং যখনই that টাইমার ফায়ার হয় তখন আমরা কারেন্টএঙ্গেল বৃদ্ধি করি। আপনার শ্রেণীর শীর্ষে, দুটি আগুনের মধ্যে সময় যুক্ত করুন:
let timeBetweenDraw:CFTimeInterval = 0.01
আপনার উদ্যোগে, টাইমার যুক্ত করুন:
NSTimer.scheduledTimerWithTimeInterval(timeBetweenDraw, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
টাইমার যখন জ্বলতে থাকে তখন আমরা সেই ফাংশনটি যুক্ত করতে পারি:
func updateTimer() {
if currentAngle < maxAngle {
currentAngle += 1
}
}
দুঃখের বিষয়, অ্যাপটি চলাকালীন, কিছুই প্রদর্শন করে না কারণ আমরা সিস্টেমটি এটি আবার আঁকতে হবে তা নির্দিষ্ট করে নি। এটি সেটনিডসডিসপ্লে () কল করে সম্পন্ন হয়। এখানে আপডেট করা টাইমার ফাংশনটি রয়েছে:
func updateTimer() {
if currentAngle < maxAngle {
currentAngle += 1
setNeedsDisplay()
}
}
_ _ _
আপনার প্রয়োজনীয় সমস্ত কোডগুলি এখানে সংক্ষেপে বলা হয়েছে:
import UIKit
import GLKit
class CircleClosing: UIView {
// MARK: Properties
let centerX:CGFloat = 55
let centerY:CGFloat = 55
let radius:CGFloat = 50
var currentAngle:Float = -90
let timeBetweenDraw:CFTimeInterval = 0.01
// MARK: Init
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
func setup() {
self.backgroundColor = UIColor.clearColor()
NSTimer.scheduledTimerWithTimeInterval(timeBetweenDraw, target: self, selector: #selector(updateTimer), userInfo: nil, repeats: true)
}
// MARK: Drawing
func updateTimer() {
if currentAngle < 270 {
currentAngle += 1
setNeedsDisplay()
}
}
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
let path = CGPathCreateMutable()
CGPathAddArc(path, nil, centerX, centerY, radius, -CGFloat(M_PI/2), CGFloat(GLKMathDegreesToRadians(currentAngle)), false)
CGContextAddPath(context, path)
CGContextSetStrokeColorWithColor(context, UIColor.blueColor().CGColor)
CGContextSetLineWidth(context, 3)
CGContextStrokePath(context)
}
}
আপনি যদি গতি পরিবর্তন করতে চান তবে কেবল আপডেটটাইমার ফাংশনটি পরিবর্তন করুন বা এই ফাংশনটি যে হারে ডাকা হয় সেটিকেই পরিবর্তন করুন। এছাড়াও, আপনি বৃত্তটি সম্পূর্ণ হয়ে গেলে টাইমারকে অবৈধ করতে চাইতে পারেন, যা আমি করতে ভুলে গিয়েছিলাম :-)
নোট: আপনার স্টোরিবোর্ডে চেনাশোনাটি যুক্ত করতে, কেবল একটি দর্শন যুক্ত করুন, এটি নির্বাচন করুন, এটির পরিচয় পরিদর্শক এবং শ্রেণি হিসাবে , সার্কেলক্লোজিং নির্দিষ্ট করুন ।
চিয়ার্স! ভাই