-
Notifications
You must be signed in to change notification settings - Fork 4
Trouble Shooting iOS
- Task, Class vs Struct
- UICollectionViewDropDelegate wrong destination index path in dropSessionDidUpdate
- Drag and Drop with DiffableDataSource
- CollectionViewListCell Customizing
- Xcode ๋น๋๊ฐ ๋์ง ์์ ๋
Nov 19, 2020
- ์ด์: ํ ์ผ์ด ๋๋
Task
๋ฅผ Struct ๋ก ํ ๊ฒ์ธ๊ฐ, Class๋ก ํ ๊ฒ์ธ๊ฐ. - ๊ฒฐ๋ก : Task๋
Class
๋ก ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ - ์ด์
- Task๋ ํ์์ ๋ Task๋ฅผ ๋๋ ํธ๋ฆฌ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, Struct๋ก ํ ๊ฒฝ์ฐ ํ๋๋ง ๋ณ๊ฒฝํด๋ ์ ์ฒด๋ฅผ ๋ค ๋ณ๊ฒฝํด์ค์ผ ํ๋ ๋ฌธ์ ๊ฐ ์์.
- ๋ Task๋ ํ๋์ ํ๋ก์ ํธ ๋ฟ ์๋๋ผ ๊ธฐ๊ฐ, ๋ผ๋ฒจ ๋ฑ์ ์ํด ์ฌ๋ฌ ๋ถ๋ถ์์ ์ฌ์ฉ๋จ. ๋ฐ๋ผ์ ๊ณ์ ๋ณต์ฌํ๊ธฐ๋ณด๋ค ์ฐธ์กฐ ํํ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ผ๊ณ ํ๋จํจ.
- ์์๋ฅผ ๋ณ๊ฒฝํด์ค ๋ parent์ children์ ๋ณ๊ฒฝ์ด ๋น๋ฒํ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ๋ฅผ ํตํด ๊ด๋ฆฌํ ์ ์๋ class๊ฐ ๋ ์ ํฉํ๋ค๊ณ ํ๋จ.
func collectionView( _ collectionView: UICollectionView, dropSessionDidUpdate session: UIDropSession,
withDestinationIndexPath destinationIndexPath: IndexPath?)
-> UICollectionViewDropProposal
์ ํจ์๋ cell์ dragํ ๋ cell์ drag์์น๊ฐ ๋ณ๊ฒฝํ ๋ ๋ง๋ค collectionview ๋ด์ cell์์น๋ฅผ 'proposal'ํ๋ ์ญํ ์ ํ๊ณ ์์ผ๋ฉฐ destinationIndexPath๋ cell์ด ์์นํ๋ indexPath๋ฅผ ์๋ฏธํ๋ค.
- ์ด์: destinationIndexPath๊ฐ ๋ค๋ฅธ ์์น๋ก ๊ฐ๋ ๊ฐ์๊ฐ์ ์ ์งํ๊ฑฐ๋ ๊ฐ๋ ๋ฐ๋๊ฑฐ๋ ์์ง์์ ๋ง์ง ์๋ ๊ฐ์ ์ถ๋ ฅํ๋ค.
- ๊ฒฐ๋ก : session.location์ ํตํด ์ ํํ destination indexpath๋ฅผ ์์๋ธ๋ค.
// Calculating location in view
let location = session.location(in: collectionView)
var correctDestination: IndexPath?
// Calculate index inside performUsingPresentationValues
collectionView.performUsingPresentationValues {
correctDestination = collectionView.indexPathForItem(at: location)
}
- ์ด์
- UIKit์ ๋ฒ๊ทธ๋ผ๋ ์๊ฒฌ..
- collectionView ์์์์ ์๋์ ์ธ index path๋ฅผ ๊ตฌํ๋ค.
- Apple Developer ๋ฌธ์ ์ ์
- performUsingPresentationValues(_:) Execute actions on the current object using index paths that are relative to the presentation layer of that object.
Nov 20, 2020
- ์ด์
- DiffableDataSource์์ ๊ฐ์ฌํ๊ฒ๋ reorder ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ์ง๋ง ์์ ๋ฅผ ๋ณด๋ฉด reorder accessory๋ฅผ ์ด์ฉํด์๋ง ์ฎ๊ธธ ์ ์๊ฒ ๋์ด์๋ค.
- ์์ด ๊ทธ๋ฅ ์ ์ ๋ฐ๋ก ํ ์๋ ์์๊น??
- ๊ฒฐ๋ก
- ๊ธฐ์กด์ CollectionView์์ ์ฌ์ฉํ๋ ๋ฐฉ์ ๋๋ก
UICollectionViewDragDelegate
์UICollectionViewDropDelegate
๋ฅผ ๊ตฌํํ๋ฉด ์ ์ฉํ ์ ์๋ค! - reorder ๋๊ณ ๋๋ฉด dataSource์
reorderingHandlers
๋ ๋ถ๋ฆฌ๋ ๊ฒ์ ํ์ธ
- ๊ธฐ์กด์ CollectionView์์ ์ฌ์ฉํ๋ ๋ฐฉ์ ๋๋ก
- ์ด์
- ์์ ์ ์ด ์ ํ๊ณ ํผ์ณ์ง๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ฐ reorder ์ ์ธ์ฌ๋ฆฌ๊น์ง ๊ฐ์ด ์์ผ๋ฉด ๋ณ๋ก ์์์ง๊ฐ ์๊ณ ๋ถํธํด์, ๊ธฐ์กด์ ๋ฐฉ์์ฒ๋ผ ์ ์ ์ง์ ๋๋๊ทธ ํด์ ์ฎ๊ธธ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ๋ด
- ์ด์
-
iOS14์
NSDiffableDataSourceSectionSnapshot
๊ฐ ๋ฑ์ฅํ๋ค. ๋๋ถ์ subItem์ ์์ฝ๊ฒ ๊ตฌํํ ์๊ฐ ์๊ฒ ๋์๋๋ฐ... ์ด๊ฑธ reorder ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?- ๋ฌผ๋ก Diffable์ ๋๋ฌด Hotํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์๋ ์ ๋์ํ๋ ๊ฒ
์ฒ๋ผ
๋ณด์ธ๋ค.
- ํ์ง๋ง ๋ฌธ์ ๋ ์ด๋ ๋ค.
์์ฑํ ์ ์๊ฒ ์ง?
์ ์ subItem์ด ๋ฐ์ผ๋ก ๋์์ผ๋ฉด์์ฑํ ์ ์๊ฒ ์ง?
์ ์๋ ์๋ธ์์ดํ ์ด ์ฌ๋ผ์ ธ์ผ ํ๋๋ฐ ๊ทธ๋ ๊ฒ ๋์ง ์๋๋ค... - ๋ณด์ด๊ธฐ์๋
์์ฑํ ์ ์๊ฒ ์ง?
๋ฐ์ cell๋ค์ด ๋ค์ด๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง diffable์ ํ์ฌ ๋ณด์ด๋ ์ ๋ค์ ๋ชจ๋ ํผ์ณ์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๊ด๋ฆฌํ๋ ๊ฒ ๊ฐ๋ค. ๋ฐ๋ผ์ ๋จ์ํhehehe2
์ ์ ์ด๋์ํค๋ฉด ์ด ์ ์ parent๊ฐ ๋๋์์ฑํ ์ ์๊ฒ ์ง?
์ ์ ๋ณํ๊ฐ ์๋ค๊ณ ํ๋จํ๋์ง ์ ๊ฑฐ๋์ง ์๋๋ค ใ
- ๋ฌผ๋ก Diffable์ ๋๋ฌด Hotํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์๋ ์ ๋์ํ๋ ๊ฒ
-
-
์ด์
-
CollectionViewListCell
์ ์ฌ์ฉํ ๋ cell ์ด ์๋๋ผ, ์ ์์ ์ฒดํฌ๋ฒํผ ์ด ํด๋ฆญ ๋์ ๋๋ฅผ ๊ฐ์งํ๊ณ ์ถ๋ค.
-
-
๊ฒฐ๋ก
-
๊ธฐ๋ณธ
defaultContentConfigure
๋ฅผ ์ฌ์ฉํด์๋ ์ ์์ image๊ฐ ์ ํ๋์ ๋๋ฅผ ๊ฐ์งํ ์ ์๋ ์ด๋ฒคํธ๋ ๋ฐ๋ก ์๋ ๊ฒ์ผ๋ก ํ์ธ๋จโ ๋ฐ๋ผ์ custom ํ์
-
์ฐ์ Custom ๊น์ง๋ ํด์ ์ํ๋ ๊ฒฐ๊ณผ๋ ์ป์์ผ๋ contentView์ layout์ ์ก๋ ๊ณผ์ ์์ warning์ ํด๊ฒฐํ์ง ๋ชปํจ ใ ใ
- ContentView์ width๋ 22์ธ๋ฐ ๋ฒํผ์ด 30์ด๋ผ ์ ๋๋ก ์ก์ ์๊ฐ ์๋ค๋ ์๋์ผ๋ก ๋ณด์ธ๋ค...
- contentView์ ๋ ์ด์์์ CollectionViewListCell์์ ์ก์์ฃผ๋ ๊ฒ ๊ฐ์๋ฐ ์ด์ฐ ํ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ๋ค. ๋ณด์ฌ์ง๋ ๋ ์ด์์์๋ ๋ฌธ์ ๊ฐ ์์ด๋ณด๊ธด ํ๋๋ฐ.. ๋์ค์ ์์ ํด๋ณด๋๊ฑธ๋ก...๐ฅ
-
-
ํด๊ฒฐ๊ณผ์
-
UIContentConfiguration
๋ฅผ ์ปค์คํ ํ๋ ค๋ฉด 2๊ฐ์ง๊ฐ ํ์ํ๋ค.-
UIContentConfiguration๋ฅผ ์์๋ฐ์
CustomContentConfiguration
- 2๊ฐ์ง ๋ฉ์๋๋ฅผ ํ์๋ก ๊ตฌํํด์ค์ผ ํ๋ค.
// ๋ฐ์ ํ์๋ก ๊ตฌํํด์ค CustomContentView๋ฅผ return ํด์ค๋ค. func makeContentView() -> UIView & UIContentView // ListCell์ updateConfiguration(using state:)์์ state๋ฅผ ์ ๋ฌ๋ฐ์ // ์๊ธฐ ์์ ์ ์ธํ ํ๋ค. func updated(for state: UIConfigurationState) -> Self
-
ContentConfiguration์ ๋ทฐ๊ฐ ๋์ด์ค UIView & UIContentView๋ฅผ ์์๋ฐ์
CustomContentView
- configuration์ ์ ๋ฌ๋ฐ์ ๋ทฐ๋ฅผ ์ธํ ํ๊ณ ๋ทฐ์ ๋ ์ด์์์ ์ก๋๋ค.
init(configuration: TaskContentConfiguration) { super.init(frame: .zero) setupViews() apply(configuration: configuration) }
-
-
PS
- ๋ค์๋ณด๋ Modern collectionView ์์ ์ Custom Cell ํ๋ ์์ ๋ ์๋ค...
- ์ด๊ฑด configuration์ customํ์ง ์๊ณ default๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ฌ๊ธฐ์ contentView์ ์ง์ ๋ทฐ๋ฅผ ๋ถ์ฌ์ ์์ ํ๋ ๋ฐฉ์์ผ๋ก ๋ณด์ธ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ์ด์์ ์๋ ์์ด ํ ์ ์์ผ๋ ค๋... ๋์ค์ ๋ ์ฐธ๊ณ ํด์ ๊ฐ์ ํด๋ณด๊ธฐ...
-
- UICollectionView List with Custom Cell and Custom Configuration
- https://github.com/LeeKahSeng/SwiftSenpai-UICollectionView-List
Nov 24, 2020
cmd+R ์ด ๋จนํ์ง ์๊ณ , xcode์์ ์คํ ๋ฒํผ์ ํด๋ฆญํ๋ฉด success๋ ๋จ์ง๋ง ์๋ฌด๋ฐ ๋ฐ์๋ ์ผ์ด๋์ง ์๋๋ค.
project.pbxproj
ํ์ผ์์ ์ฑ ๊ด๋ จ reference๊ฐ ์ง์์ ธ์ ์๊ธด ๋ฌธ์ ์๋ค.
ํ๋ก์ ํธ ํ์ผ์์ ์๋ PBXFileReference section ์ฃผ์ ๋ฐ์ ๋ค์ ํ๋ก์ ํธ ๋ ํผ๋ฐ์ค๋ฅผ ์ถ๊ฐ์์ผ์ฃผ๋ฉด ํด๊ฒฐ๋๋ค.
/* Begin PBXFileReference section */
4C3F5657256B80B4006D7C9F /* HalgoraeDO.app */ = { isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HalgoraeDO.app; sourceTree = BUILT_PRODUCTS_DIR; };
-
Syncing a Core Data Store with CloudKit
- cloudkit์ ๋์ ๋ฐฉ์ ์ฐธ๊ณ ํ๊ธฐ
UIBezierPath on collectionview
cell ๋ด๋ถ์ collectionview๋ฅผ???
alpha = 0 ์ผ๋ button action
textview autoheight
- ๋๋๊ทธ์ค๋๋ ์ขํ์ ๋ฐ๋ฅธ ๋ผ์ธ ์์ฑ ์์