Charts: рдирд╛рдорд┐рдд рдЕрдХреНрд╖ рд╕рдорд░реНрдерди?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЕрдкреНрд░реИрд▓ 2015  ┬╖  36рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: danielgindi/Charts

2015-04-19 00-48-45 lifts rimmer sk last -1

рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд┐рдХреА рдХреЛ рджреЗрдЦрд╛, рд▓реЗрдХрд┐рди рдПрдХреНрд╕ рдпрд╛ рд╡рд╛рдИ рдЕрдХреНрд╖ рдирд╛рдо рджреЗрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рдорд┐рд▓реАред

рд╕рдВрднрд╡ рд╣реИ рдХрд┐?

feature help wanted тШЕтШЕтШЕ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдмрд╕ рдЗрд╕рдореЗрдВ рднреА рднрд╛рдЧ рдЧрдпрд╛ред рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд▓рдЧрднрдЧ 4 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЦреБрд▓рд╛ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрд╕реНрдЯрдо рд╡рд╛рдИ-рдЕрдХреНрд╖ рд░реЗрдВрдбрд░рд░ рд▓рд┐рдЦрд╛ рдерд╛ред рдмрд╛рдПрдВ рдЕрдХреНрд╖ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЖрдкрдХреЗ рдЪрд╛рд░реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ:

leftAxis.xOffset = 45
leftYAxisRenderer = MyYAxisRenderer(viewPortHandler: viewPortHandler, yAxis: leftAxis, transformer: getTransformer(forAxis: .left))

рдФрд░ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рд░реЗрдВрдбрд░рд░ рдмрдирд╛рдПрдВ:

class MyYAxisRenderer: YAxisRenderer {
    private static let titleLabelPadding: CGFloat = 20

    /**
     Unfortunately iOS Charts has marked many of its methods with internal visibily
     so they cannot be customized. Instead you often need to re-implement logic from
     the charting framework.
    */
    override func renderAxisLabels(context: CGContext) {
        // Render the y-labels.
        super.renderAxisLabels(context: context)

        // Render the y-axis title using our custom renderer.
        renderTitle(title: "Lorem ipsum dolor sit amet", inContext: context, x: MyYAxisRenderer.titleLabelPadding)
    }
}

// MARK: Y-Axis titles.
private extension MyYAxisRenderer {
    func renderTitle(title: String, inContext context: CGContext, x: CGFloat) {
        guard let yAxis = self.axis as? YAxis else { return }

        let attributes: [NSAttributedString.Key: Any] = [
            .font: yAxis.labelFont,
            .foregroundColor: yAxis.labelTextColor
        ]

        // Determine the chart title's y-position.
        let titleSize = title.size(withAttributes: attributes)
        let verticalTitleSize = CGSize(width: titleSize.height, height: titleSize.width)
        let point = CGPoint(x: x, y: (viewPortHandler.chartHeight - verticalTitleSize.height) / 2)

        // Render the chart title.
        ChartUtils.drawText(context: context,
                            text: title,
                            point: point,
                            attributes: attributes,
                            anchor: .zero,
                            angleRadians: .pi / -2)
    }
}

рдпрд╣ рдЙрджрд╛рд╣рд░рдг 20x рдХреА рдмрд╛рдИрдВ рдСрдлрд╕реЗрдЯ / рдЧрджреНрджреА рдХреЗ рд╕рд╛рде y- рдЕрдХреНрд╖ рд╢реАрд░реНрд╖рдХ рдФрд░ 45px рдХреЗ рдмрд╛рдПрдБ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде y- рдЕрдХреНрд╖ рд▓реЗрдмрд▓ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдорджрдж рдорд┐рд▓реЗрдЧреА ...

рд╕рднреА 36 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдВрдбреНрд░реЙрдЗрдб рд╡рд░реНрдЬрди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣рд░ рдЪреАрдЬ рдпрд╣рд╛рдВ рдареАрдХ рдЙрд╕реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд рд╣реИ!

@danielgindi рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдкрд╣рд▓реЗ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝ рдЪреБрдХрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖрдпрд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ?

рдЦреИрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :-)
рдпрд╛ рдЖрдк рдЗрд╕реЗ MPAndroidChart рд░реЗрдкреЛ рдкрд░ рдорд╛рдВрдЧ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдпрд╣ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рднреА рдЦреАрдВрдЪреВрдВрдЧрд╛

+1, рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдФрд░ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреА - рд╣рдо рд╕рднреА рдХреЛ рдЧреНрд░реЗрдб рд╕реНрдХреВрд▓ рд╕реЗ рдЕрдкрдиреА рдХреБрд▓реНрд╣рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рд╢реАрд░реНрд╖рдХ рджреЗрдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! :)

рдпрд╣ рд╕рдВрднрд╡ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИред рдПрдХреНрд╕ рдЕрдХреНрд╖ рд▓реЗрдмрд▓ рдХреЛ рдШреБрдорд╛рдиреЗ рдХреЗ рд╕рдорд╛рдиред рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рд░реЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рдХреА рдЧрдгрдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдХреЗрд╡рд▓ 90 рд░реЛрдЯреЗрд╢рди рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреЗрдХреНрд╕реНрдЯ рдФрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХрд▓рд░, рдлреЙрдиреНрдЯ рдХреЗ рд╕рд╛рде y рдЕрдХреНрд╖ рдХреЗ рдмреАрдЪ рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓реЛрдЧ рдФрд░ рдкреВрдЫреЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдг, рд╕реНрдерд┐рддрд┐, рдХрдИ рд░реЗрдЦрд╛рдПрдВ, рдЖрджрд┐... рдпрд╣ рджрд░реНрджрдирд╛рдХ рд╣реИ

рдореИрдВ рдЖрдкрдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд░реЛрдЯреЗрд╢рди рдФрд░ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдХреНрд╖ рд▓реЗрдмрд▓ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЕрднреА рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЪрд╛рд░реНрдЯ рджреГрд╢реНрдп рдореЗрдВ рдПрдХ рд▓реЗрдмрд▓ рдЬреЛрдбрд╝рд╛ рд╣реИ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд┐рдП рд╣реИрдВ?

рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдореВрд▓ рдЕрдХреНрд╖ рд▓реЗрдмрд▓ рднреА рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд▓рд╛рдн рд╣реЛрдЧрд╛, рдФрд░ рдЖрдк рдЬрд┐рддрдирд╛ рдЪрд╛рд╣реЗрдВ рдЙрддрдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ (рдЖрдЦрд┐рд░рдХрд╛рд░, рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ)ред рдЖрд╢рд╛ рд╣реИ рдЖрдк рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ !

@UberJason рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЕрдХреНрд╖ рд╡рд░реНрдЧ рдХреЛ рдЙрдк-рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╖ рдирд╛рдо рд╕рдВрдкрддреНрддрд┐ рд▓рд╛рдЧреВ рдХреА рд╣реИ рдФрд░ рдкреИрд░ рдХреА рдЕрдВрдЧреБрд▓реА рдШреВрд░реНрдгрди рдХреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд╡рд░реНрдЧ + рдУрд╡рд░рд░рд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЫреБрдЯреНрдЯреА рдкрд░ рд╣реВрдВ.. рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ v3 рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдлрд╛рдЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

+1 рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

+1 рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

+1 рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

+1 рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

рдХреНрдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

+1 рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

+1

рдХреНрдпрд╛ рдХреЛрдИ рдлреНрд░реЗрдо рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдИ рдХрд╕реНрдЯрдо UIView рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

+1 рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

рдХреНрдпрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдПрдХ рдкреАрдЖрд░ #2387 рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред

+1 рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

+1 рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

+1 рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред .....

+1 рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

+1 рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реЛрдЧреА !!

+1

#2452 рдФрд░ #2387 . рджреЗрдЦреЗрдВ

+1 рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ

рдореБрдЭреЗ рднреА +1 рдХрд░реЗрдВ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ....

рдореБрдЭреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рднреА рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ....

рдореИрдВ рднреА............

рдореБрдЭреЗ рднреА рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЪрд╛рд╣рд┐рдП..

рдореБрдЭреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рднреА рдЪрд╛рд╣рд┐рдП.. рдореИрдВ рдкреБрдирд░реНрд▓реЗрдЦрди рдХреЗ рд╣рд░ рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдердХ рдЧрдпрд╛ рд╣реВрдБ

рдореИрдВрдиреЗ рдХрдИ рдзрд╛рдЧреЗ рдкрд░ рдЕрдХреНрд╖ рд╢реАрд░реНрд╖рдХ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдмрд╣реБрдд рд╕реА рдмрд╛рддреЗрдВ рджреЗрдЦреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдореИрдВ рд╕реНрд╡рд┐рдлреНрдЯ 4.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореБрдЭреЗ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖ рд╢реАрд░реНрд╖рдХ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░рд╛ рдЪрд╛рд░реНрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИ?

рдореИрдВ рдмрд╕ рдЗрд╕рдореЗрдВ рднреА рднрд╛рдЧ рдЧрдпрд╛ред рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд▓рдЧрднрдЧ 4 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЦреБрд▓рд╛ рд╣реИред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрд╕реНрдЯрдо рд╡рд╛рдИ-рдЕрдХреНрд╖ рд░реЗрдВрдбрд░рд░ рд▓рд┐рдЦрд╛ рдерд╛ред рдмрд╛рдПрдВ рдЕрдХреНрд╖ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдЖрдкрдХреЗ рдЪрд╛рд░реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ:

leftAxis.xOffset = 45
leftYAxisRenderer = MyYAxisRenderer(viewPortHandler: viewPortHandler, yAxis: leftAxis, transformer: getTransformer(forAxis: .left))

рдФрд░ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рд░реЗрдВрдбрд░рд░ рдмрдирд╛рдПрдВ:

class MyYAxisRenderer: YAxisRenderer {
    private static let titleLabelPadding: CGFloat = 20

    /**
     Unfortunately iOS Charts has marked many of its methods with internal visibily
     so they cannot be customized. Instead you often need to re-implement logic from
     the charting framework.
    */
    override func renderAxisLabels(context: CGContext) {
        // Render the y-labels.
        super.renderAxisLabels(context: context)

        // Render the y-axis title using our custom renderer.
        renderTitle(title: "Lorem ipsum dolor sit amet", inContext: context, x: MyYAxisRenderer.titleLabelPadding)
    }
}

// MARK: Y-Axis titles.
private extension MyYAxisRenderer {
    func renderTitle(title: String, inContext context: CGContext, x: CGFloat) {
        guard let yAxis = self.axis as? YAxis else { return }

        let attributes: [NSAttributedString.Key: Any] = [
            .font: yAxis.labelFont,
            .foregroundColor: yAxis.labelTextColor
        ]

        // Determine the chart title's y-position.
        let titleSize = title.size(withAttributes: attributes)
        let verticalTitleSize = CGSize(width: titleSize.height, height: titleSize.width)
        let point = CGPoint(x: x, y: (viewPortHandler.chartHeight - verticalTitleSize.height) / 2)

        // Render the chart title.
        ChartUtils.drawText(context: context,
                            text: title,
                            point: point,
                            attributes: attributes,
                            anchor: .zero,
                            angleRadians: .pi / -2)
    }
}

рдпрд╣ рдЙрджрд╛рд╣рд░рдг 20x рдХреА рдмрд╛рдИрдВ рдСрдлрд╕реЗрдЯ / рдЧрджреНрджреА рдХреЗ рд╕рд╛рде y- рдЕрдХреНрд╖ рд╢реАрд░реНрд╖рдХ рдФрд░ 45px рдХреЗ рдмрд╛рдПрдБ рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде y- рдЕрдХреНрд╖ рд▓реЗрдмрд▓ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдорджрдж рдорд┐рд▓реЗрдЧреА ...

рд╕реНрд╡рд┐рдлреНрдЯрдпреВрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рд▓ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛:
https://github.com/danielgindi/Charts/issues/4405

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕