Skip to content
This repository was archived by the owner on Jun 22, 2019. It is now read-only.

PostView

ChenJesse edited this page Sep 28, 2016 · 2 revisions

##Overview The PostView is a view written with flexibility in mind, so that it can adjust its UI and functionality depending on whether it is in the FeedViewController, PostHistoryTableViewController, or LikedTableViewController. Because it has to support so much functionality, there is quite a lot of logic in the view.

##Project Files ###PostView.swift The main component of a PostView is a Post. Based on the type attribute, which is of type ViewType (Feed, History, Liked), the UI of the PostView will adjust accordingly. For example, we can see how the imageView adjusts:

  • Feed: avatarImageView is round and is post.user.imageURL (user's FB profile pic)
  • History and Liked: avatarImageView is square, is the song's album art

All taps on the PostView are handled by postViewPressed(sender: UIGestureRecognizer). It detects hits on the likedButton, addButton, avatarImageView. These methods rely on the delegate, of type PostViewDelegate.

One of the most interesting features of the PostView is it's playing animation. As a song is playing, a rectangle will grow from left to right, proportional to the song's progress. Scrubbing is also handled through this rectangle. This functionality is achieved in drawRect, which draws a rectangle with the width proportional to progress, and changeProgress, which handles the pan gesture. Based on where the swipe ends, the x coordinate is extracted and is divided by the entire cell width to get the progress of the song.

###PostViewDelegate @objc protocol PostViewDelegate { optional func didTapAddButtonForPostView(postView: PostView) optional func didLongPressOnCell(postView: PostView) optional func didTapImageForPostView(postView: PostView) } LikedTableViewController, FeedTableViewController, and PostHistoryTableViewController all implement PostViewDelegate.

##Current State PostView is likely to change if we decide to redesign some of the feed. Right now, the "like" and "add" buttons are hard to click and a bit buggy. Those changes should reside mainly in the UI, so the structure of the PostView should stay relatively intact.

##External Sources

Clone this wiki locally