This is a personal project aimed at learning and practicing various concepts!
View Demo
·
Report Bug
Table of Contents
This is a my personal project where I am trying to emulate the features of Instagram after using them. I have utilized several frameworks and classes, including:
- UICollectionViewCompositionalLayout: : To create multiple sections with various layouts and sizes.
- PhotosKit: For loading images from the user's photo library.
- AVFoundation: For capturing photos.
- DispathQueue and DispathGroup: Fetching Data with multiple Threads.
- UIview.animate(), CGAffineTransform(), UIPanGestureRecognizer(): Enhancing user experiences.
- Firebase: For user authentication and user data storage.
Project is builted without Storyboard.
Architecture: MVVM.
Instagram have 4 main Controlers:
- ProfileConttroller: This controller is responsible for editing the user's profile, as well as managing the follow and unfollow actions for other users. Depending on the user's identity and the screen they are presented from, different layouts will be displayed.
- HomeController: This controller is used to display the photo statuses. Users can perform actions such as liking, commenting, and viewing users who have liked a particular status.
- UploadStatusController: From this controller, users can select images from their own photo library or capture new photos to post as statuses.
- ExploreController: This controller is used to showcase other users' statuses and enables searching for other users.
Implementing ProfileConttroller has been both interesting and challenging. It took me 6 days to complete. To support both vertical and horizontal scrolling, I had to implement two scroll views and two child controllers
- HeaderProfileController: This controller displays user information and handles follow/unfollow actions.
- Bottom ProfileController: BottomProfileController is a controller that contains three child controllers for horizontal scrolling.
- ContainerScrollView: This scroll view is responsible for containing the views of the two child controllers mentioned above.
- OverlayScrollView: For scrolling views.
In addition, I have also customized a Bottom Sheet Controller for the logout and settings functionality
Main Feature ProfileController
- Scroll behaves like Instagram: Start at the header profile, then continue scroll to bottom images.
- Log out, Edit Profile, Check followers and Following uers :
Log out | Edit Profile | Check Follower and Following |
---|---|---|
Self-Sizing | Check Profile Other User | Likes and Comments |
---|---|---|
Search and Explore Statues:
Upload Status with caption and photo image.
Full Name - Trinh Tien Viet - tienviet153153@gmail.com
Project Link: https://github.com/Vietdz123/Instagram.git