• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Drawing boxes around each digit entered in UITextField (Number Pad)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Drawing boxes around each digit entered in UITextField (Number Pad)


  • Subject: Drawing boxes around each digit entered in UITextField (Number Pad)
  • From: Devarshi Kulshreshtha <email@hidden>
  • Date: Sun, 10 Feb 2019 02:06:13 +0530

I am trying to draw boxes around each digit entered by a user in
UITextField for which keyboard type is - Number Pad.

To simplify the problem statement I assumed that each of the digits (0 to
9) will have same bounding box for its glyph, which I obtained using below
code:

func getGlyphBoundingRect() -> CGRect? {
        guard let font = font else {
            return nil
        }
        // As of now taking 8 as base digit
        var unichars = [UniChar]("8".utf16)
        var glyphs = [CGGlyph](repeating: 0, count: unichars.count)
        let gotGlyphs = CTFontGetGlyphsForCharacters(font, &unichars,
&glyphs, unichars.count)
        if gotGlyphs {
            let cgpath = CTFontCreatePathForGlyph(font, glyphs[0], nil)!
            let path = UIBezierPath(cgPath: cgpath)
            return path.cgPath.boundingBoxOfPath
        }
        return nil
    }

I am drawing each bounding box thus obtained using below code:

func configure() {
        guard let boundingRect = getGlyphBoundingRect() else {
            return
        }
        for i in 0..<length { // length denotes number of allowed digits in
the box
            var box = boundingRect
            box.origin.x = (CGFloat(i) * boundingRect.width)
            let shapeLayer = CAShapeLayer()
            shapeLayer.frame = box
            shapeLayer.borderWidth = 1.0
            shapeLayer.borderColor = UIColor.orange.cgColor
            layer.addSublayer(shapeLayer)
        }
    }

Now problem is -  if I am entering digits - 8,8,8 in the text field then
for first occurrence of digit the bounding box drawn is aligned, however
for second occurrence of same digit the bounding box appears a bit offset
(by negative x), the offset value (in negative x) increases for subsequent
occurrences of same digit.

I tried to solve the problem by setting NSAttributedString.Key.kern to 0,
however it did not change the behavior.

Am I missing any important property in X axis from the calculation due to
which I am unable to get properly aligned bounding box over each digit?
Please suggest.

--
Thanks,

Devarshi
_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Drawing boxes around each digit entered in UITextField (Number Pad)
      • From: Quincey Morris <email@hidden>
    • Re: Drawing boxes around each digit entered in UITextField (Number Pad)
      • From: "Gary L. Wade" <email@hidden>
  • Prev by Date: Re: Questions regarding the sandbox in iOS
  • Next by Date: Re: Drawing boxes around each digit entered in UITextField (Number Pad)
  • Previous by thread: Re: Questions regarding the sandbox in iOS
  • Next by thread: Re: Drawing boxes around each digit entered in UITextField (Number Pad)
  • Index(es):
    • Date
    • Thread