iOS 개발/UIKit

    [GestureRecognizer] Gesture 잘 사용하기 - 동시에 여러 gesture 사용하기, 주의점

    [GestureRecognizer] Gesture 잘 사용하기 - 동시에 여러 gesture 사용하기, 주의점

    제스처를 사용하는 방법은 간단합니다. 자! 저는 지금부터 infoView라는 제가 만든 View에 왼쪽으로 Swipe했을 때 어떤 동작이 실행되도록 해보겠습니다!! 먼저 우리는 제스처 인식기를 만들어주어야 합니다. let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(infoviewSwipeLeft)) 여기서 만든 제스처 인식기는 제스처가 인식되면 infoviewSwipeLeft 라는 @objc 함수를 실행합니다!!! 이 함수의 내용은 우리가 구현하기 나름이겠죠?? 자 그럼 어떤 제스처이냐?? 우리는 UISwipeGestureRecognizer라는 제스처 인식기를 만들었죠? 그러면 이 제스처 인식기의 방향을 다음과 같이 설정해줄..

    [UICollectionView] View를 하나씩 넘기기, 여러개씩 넘기기

    [UICollectionView] View를 하나씩 넘기기, 여러개씩 넘기기

    우리가 보는 많은 앱들에는 CollectionView가 생각보다 핵심적인 기능으로 들어가는 경우가 많습니다. Netfilx 앱에서 옆으로 밀어서 영화를 탐색할 때, coupang에서 찜한 목록 등을 볼 때 등 컬렉션 뷰는 테이블 뷰가 하는 일을 모두 할 수 있으면서도 레이아웃까지 가지고 있어서 수직 스크롤 뿐만 아니라 수평 스크롤도 가능합니다. 하지만 아래 앱처럼, 하나씩 넘기는 건 어떻게 구현할 수 있을까요?? 하나씩 넘기고, 현재 내가 보고 있는 collectionView의 index가 어떤 인덱스인지까지 확인하는 방법은 무엇일까요? 일단 주우우우욱 스크롤이 되는 collectionView는 만들 수 있을 겁니다. tableView를 만들 수 있다면, 분명히 쉽게 가능할 것입니다. 하지만 지금 내가 ..

    [UIImageView] image 색 변경하기

    [UIImageView] image 색 변경하기

    우리가 이런 system Image의 색을 자유롭게 변경할 수 있듯이, 우리가 직접 넣은 이미지도 색을 변경할 수 있다. 방법은 다음과 같다. 1. 먼저 Image를 template Image 상태로 rendering해준다. template 상태에서 tint color을 수정해줄 수 있다. testImageView.image = UIImage(named: "TEST_IMAGE")?.withRenderingMode(.alwaysTemplate) 2. 이제 image의 tint color을 자유롭게 수정할 수 있다. testImageView.tintColor = .blue image의 색을 변경하는 아주 간단한 코드를 만들어보았다. import UIKit class ViewController: UIViewC..

    [UITableVIew] automaticDimension 이 되지 않을때

    [UITableVIew] automaticDimension 이 되지 않을때

    cell custom 해서 사용하다 보면, content의 크기에 따라, cell 크기가 유동적으로 조정되어야 할 때가 있다. 이때 사용하는 것이 rowHeight를 UITableView.automaticDimension로 설정해주는 것이다. 하지만, 최근에 코드를 짜던 중, 저게 들어먹지를 않아서 고생했었다. 처음에는 rowHeight 를 정하는 시점이, 안에 content 들이 들어온 후가 되어야 된다고 착각해서, 함수 선언 위치도 바꿔보고, 이것저것 만져봤는데도 도저히 적용되지 않았다. 그러다가, 해결방법을 찾게 되었다. 바로 autoLayout을 설정해주어야 한다는 것이다!! 정말 간단한 문제인데 생각을 못했었다.. (사실 10분 만에 해결하긴 했다) 암튼! 요로코롬 오토레이아웃을 걸어주면, 내부..

    [UIView] view를 fade in, fade out 시키는 방법

    [UIView] view를 fade in, fade out 시키는 방법

    UIView의 alpha 값을 with duration 을 걸어둔 상태에서 alpha 값을 올리고 내리고 하는 animation을 걸어서 만들어졌다. UIView class에 extension 하는 식으로 선언해서, 계속 사용 가능하다. public extension UIView { func fadeIn(duration: TimeInterval = 1.0) { UIView.animate(withDuration: duration, animations: { self.alpha = 1.0 }) } func fadeOut(duration: TimeInterval = 1.0) { UIView.animate(withDuration: duration, animations: { self.alpha = 0.0 }) } }

    [Animation] animation play 중간에 값 변경하는 몇가지 방법

    [Animation] animation play 중간에 값 변경하는 몇가지 방법

    아무것도 모를때는 아래 방법을 썼지만, 조금 더 공부를 해보니 이 방법들을 쓰면 절대 안된다ㅋㅋㅋ 여유가 될 때, CoreAnimation과 UIProperty animation에 대해서 정리해보겠다. 애니메이션은 미리 완성된 형태를 재생하는 방식이다. 이에 대해서 사용자와의 상호작용이 이루어지긴 하지만, 한 애니메이션에서 여러가지 변수에 따라서 많은 것을 바꾸려면 수 많은 레이어가 필요하게 되고, 이는 결국 cpu와 메모리에 큰 부담으로 이어진다. 최근 내가 만들고 있는 애니메이션은, 물결 위에 도형이 둥둥 떠있는데, 공이 떠있는 애니메이션이 재생되면서, 동시에 사용자가 특정 행동을 했을때 도형의 색깔이나 모양이 바뀌는 애니메이션이다. 이를 위해서는 일단 공이 튀기는 애니메이션이 재생되어야 하고 사용자..

    [Swift] viewcontroller에서 앱이 background에서 foreground 변환 감지

    [Swift] viewcontroller에서 앱이 background에서 foreground 변환 감지

    private var observer: NSObjectProtocol? override func viewDidLoad() { observer = NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, queue: .main) { [unowned self] notification in // 감지되었을 때 수행하고 싶은 동작 } }

    [NavgiationController] 네비게이션바 투명하게 만들기

    [NavgiationController] 네비게이션바 투명하게 만들기

    네비게이션바는 StroyBoard를 통해서는 반투명하게(translucent) 만 가능하다. 하지만 이렇게 되면, 네비게이션바를 사용하는 앱들은 애니메이션이나 색변화 등을 화면 전체에 가득차게 만들 수가 없다. 이를 해결하기 위해서는 해당 View의 뷰컨트롤러에서 navigationBar을 다루어주면 된다. override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage() navi..