Skip to main content

Tech

Increasing the tap area of a UIButton

4 min read

The other day, Soroush wrote a great post about hitTest(_:with:) (you should check it out), which reminded me of a problem I solved the other week: I wanted to increase a UIButton’s tap area, without increasing the button’s frame.

The following code would go in one of the button’s superviews; for example, you might have a mainContainer, which has a UIStackView that contains the button — we’d implement it in mainContainer:

Continue reading →

Extracting the location from a photo

8 min read

I’d like to quickly explain how to let the user pick a photo and automatically extract the location for them. The post is targeted at iOS 11+, because starting with this version, to use an UIImagePickerController we don’t need to ask the user’s permission to access their photo library, because the controller runs as a separate process from the app, which means the app gets read-only access only to the image the user selected, and just to the image — no metadata included.

For this, we will need the UIImagePickerController:

Continue reading →

Extracting and parsing tweets from your Twitter archive

16 min read

I’ve recently gave Micro.blog a try and  shortly after  I thought of importing all my tweets here, because … why not own my content? This post will be about extracting and converting your Twitter archive into simpler objects with just text and timestamp — there are many more available fields, but these were the only ones I was particularly interested in.

First things first, we need to request your archive: in our Twitter’s profile settings, all the way to the bottom we can find ”Your Tweet archive”; we need to click on ”Request your archive” and after a while we’ll receive an email with a link to the download.

Continue reading →

UITextView and UITextField knobs; a story

2 min read

UIKit does this really nice thing, where the user can tap around a text knob — with quite some margin, too — and still intercept the touch; but it appears that all knobs are created equal, but some are more equal than others; and so our story begins…

Continue reading →

Card Virtual

1 min read

A few months ago I was writing about a new beginning and I mentioned a couple of projects. I mentioned the first one in a previous post and now I'm writing about the second.

The main goal of the app is for users to save their fidelity cards digitally (or request new ones), combined with the conveniences of displaying merchants & their offers, and having a shopping list at hand. There's also a friends feature, with which users can share their shopping lists — shopping together, faster and smarter has never been easier!

Continue reading →

Tower

1 min read

2 years and a half ago, I was writing about how I recently started using Tower — didn't even realize it's been so long. In that post I was explaining how I solved the fact that it doesn't support opening Pull Requests. Well ... The latest version of Tower now supports it, and I gotta say they're as seamless as one would expect!

A few new features:

  • To complement Quick Open, Quick Actions shortcut makes performing actions so much easier (checkout, push, merge, etc).
  • An interactive rebase that lets you perform any actions on commits — like rename, reorder or delete — right from the branch view.
  • A GUI for reflog for those times you need to check what went wrong and where.
Continue reading →

ChallengeBeat

3 min read

A few months ago I was writing about a new beginning and I mentioned a couple of projects. I would like to present one of them today. It took longer than expected, but we launched today and we're really happy about the results. I'll start with a really short intro:

Our lives are filled with habits; some are good, some are bad. Everyone wants to get rid of their bad habits, and we all want to increase the number and/or frequency of good habits; we all want to eat healthier, do more sport, be more productive, or procrastinate less.

Continue reading →

Easier NSLayoutConstraint interactions #2

3 min read

In a previous post I talked about a new struct (LayoutPriority) and a couple of extension methods on NSLayoutConstraint to ease interacting with them. But, as I later discovered, there is no need for the new struct – we can do the same thing on UILayoutPriority itself. Let's quickly see how.

First, we move all the properties along with the operators to the extension:

Continue reading →

Creating an interactive label

7 min read

I would like to write about how you can create a label that detects and responds to various UIDataDetectorTypes. Well, we won't really make use of UIDataDetectorTypes, but NSTextCheckingResult, since we'll be using an NSDataDetector. We already have TTTAttributedLabel available, but if you need something much more lightweight, like I did, follow along.

Continue reading →