आईओएस 10 में एक ऐसी सुविधा है जिसे मैं दोहराना चाहता हूं। जब आप ऐप्पल म्यूजिक ऐप में एक एल्बम को 3 डी स्पर्श करते हैं तो यह नीचे दिखाए गए मेनू को खोलता है। हालांकि एक सामान्य चोटी और पॉप के विपरीत, जब आप उंगली उठाते हैं तो यह दूर नहीं जाता है। मैं इसे दोहराना कैसे करूं?मैं आईओएस 10 के ऐप्पल संगीत को कैसे दोहरा सकता हूं "पीक और पॉप एक्शन मेनू"
उत्तर
निकटतम मैं नकल यह निम्नलिखित कोड .. यह संगीत आवेदन की एक डमी-प्रतिकृति बनाने है मिल गया .. तब मैं PeekPop-3 डी टच प्रतिनिधियों गयी।
हालांकि, प्रतिनिधि में, मैं इशारा पहचानकर्ता के लिए एक पर्यवेक्षक जोड़ता हूं और फिर झुकाव पर इशारा रद्द करता हूं लेकिन फिर उंगली उठाए जाने पर इसे फिर से सक्षम करता हूं। इसे पुन: सक्षम करने के लिए, मैंने इसे async किया क्योंकि पूर्वावलोकन तुरंत async प्रेषण के बिना गायब हो जाएगा। मैं इसे चारों ओर एक तरह से ..
अब अगर आप नीले बॉक्स के बाहर नल, यह सामान्य की तरह गायब हो जाएगा =]
http://i.imgur.com/073M2Ku.jpg http://i.imgur.com/XkwUBly.jpg
//
// ViewController.swift
// PeekPopExample
//
// Created by Brandon Anthony on 2016-07-16.
// Copyright © 2016 XIO. All rights reserved.
//
import UIKit
class MusicViewController: UITabBarController, UITabBarControllerDelegate {
var tableView: UITableView!
var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
self.initControllers()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func initControllers() {
let libraryController = LibraryViewController()
let forYouController = UIViewController()
let browseController = UIViewController()
let radioController = UIViewController()
let searchController = UIViewController()
libraryController.title = "Library"
libraryController.tabBarItem.image = nil
forYouController.title = "For You"
forYouController.tabBarItem.image = nil
browseController.title = "Browse"
browseController.tabBarItem.image = nil
radioController.title = "Radio"
radioController.tabBarItem.image = nil
searchController.title = "Search"
searchController.tabBarItem.image = nil
self.viewControllers = [libraryController, forYouController, browseController, radioController, searchController];
}
}
नहीं पा सके
और फोर्स टच के कार्यान्वयन के कार्यान्वयन ..
//
// LibraryViewController.swift
// PeekPopExample
//
// Created by Brandon Anthony on 2016-07-16.
// Copyright © 2016 XIO. All rights reserved.
//
import Foundation
import UIKit
//Views and Cells..
class AlbumView : UIView {
var albumCover: UIImageView!
var title: UILabel!
var artist: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
self.initControls()
self.setTheme()
self.doLayout()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func initControls() {
self.albumCover = UIImageView()
self.title = UILabel()
self.artist = UILabel()
}
func setTheme() {
self.albumCover.contentMode = .scaleAspectFit
self.albumCover.layer.cornerRadius = 5.0
self.albumCover.backgroundColor = UIColor.lightGray()
self.title.text = "Unknown"
self.title.font = UIFont.systemFont(ofSize: 12)
self.artist.text = "Unknown"
self.artist.textColor = UIColor.lightGray()
self.artist.font = UIFont.systemFont(ofSize: 12)
}
func doLayout() {
self.addSubview(self.albumCover)
self.addSubview(self.title)
self.addSubview(self.artist)
let views = ["albumCover": self.albumCover, "title": self.title, "artist": self.artist];
var constraints = Array<String>()
constraints.append("H:|-0-[albumCover]-0-|")
constraints.append("H:|-0-[title]-0-|")
constraints.append("H:|-0-[artist]-0-|")
constraints.append("V:|-0-[albumCover]-[title]-[artist]-0-|")
let aspectRatioConstraint = NSLayoutConstraint(item: self.albumCover, attribute: .width, relatedBy: .equal, toItem: self.albumCover, attribute: .height, multiplier: 1.0, constant: 0.0)
self.addConstraint(aspectRatioConstraint)
for constraint in constraints {
self.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: constraint, options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
}
for view in self.subviews {
view.translatesAutoresizingMaskIntoConstraints = false
}
}
}
class AlbumCell : UITableViewCell {
var firstAlbumView: AlbumView!
var secondAlbumView: AlbumView!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.initControls()
self.setTheme()
self.doLayout()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func initControls() {
self.firstAlbumView = AlbumView(frame: CGRect.zero)
self.secondAlbumView = AlbumView(frame: CGRect.zero)
}
func setTheme() {
}
func doLayout() {
self.contentView.addSubview(self.firstAlbumView)
self.contentView.addSubview(self.secondAlbumView)
let views: [String: AnyObject] = ["firstAlbumView": self.firstAlbumView, "secondAlbumView": self.secondAlbumView];
var constraints = Array<String>()
constraints.append("H:|-15-[firstAlbumView(==secondAlbumView)]-15-[secondAlbumView(==firstAlbumView)]-15-|")
constraints.append("V:|-15-[firstAlbumView]-15-|")
constraints.append("V:|-15-[secondAlbumView]-15-|")
for constraint in constraints {
self.contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: constraint, options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
}
for view in self.contentView.subviews {
view.translatesAutoresizingMaskIntoConstraints = false
}
}
}
//Details..
class DetailSongViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.blue()
}
/*override func previewActionItems() -> [UIPreviewActionItem] {
let regularAction = UIPreviewAction(title: "Regular", style: .default) { (action: UIPreviewAction, vc: UIViewController) -> Void in
}
let destructiveAction = UIPreviewAction(title: "Destructive", style: .destructive) { (action: UIPreviewAction, vc: UIViewController) -> Void in
}
let actionGroup = UIPreviewActionGroup(title: "Group...", style: .default, actions: [regularAction, destructiveAction])
return [actionGroup]
}*/
}
//Implementation..
extension LibraryViewController : UIViewControllerPreviewingDelegate {
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = self.tableView.indexPathForRow(at: location) else {
return nil
}
guard let cell = self.tableView.cellForRow(at: indexPath) else {
return nil
}
previewingContext.previewingGestureRecognizerForFailureRelationship.addObserver(self, forKeyPath: "state", options: .new, context: nil)
let detailViewController = DetailSongViewController()
detailViewController.preferredContentSize = CGSize(width: 0.0, height: 300.0)
previewingContext.sourceRect = cell.frame
return detailViewController
}
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
//self.show(viewControllerToCommit, sender: self)
}
override func observeValue(forKeyPath keyPath: String?, of object: AnyObject?, change: [NSKeyValueChangeKey : AnyObject]?, context: UnsafeMutablePointer<Void>?) {
if let object = object {
if keyPath == "state" {
let newValue = change![NSKeyValueChangeKey.newKey]!.integerValue
let state = UIGestureRecognizerState(rawValue: newValue!)!
switch state {
case .began, .changed:
self.navigationItem.title = "Peeking"
(object as! UIGestureRecognizer).isEnabled = false
case .ended, .failed, .cancelled:
self.navigationItem.title = "Not committed"
object.removeObserver(self, forKeyPath: "state")
DispatchQueue.main.async(execute: {
(object as! UIGestureRecognizer).isEnabled = true
})
case .possible:
break
}
}
}
}
}
class LibraryViewController : UIViewController, UITableViewDelegate, UITableViewDataSource {
var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
self.initControls()
self.setTheme()
self.registerClasses()
self.registerPeekPopPreviews();
self.doLayout()
}
func initControls() {
self.tableView = UITableView(frame: CGRect.zero, style: .grouped)
}
func setTheme() {
self.edgesForExtendedLayout = UIRectEdge()
self.tableView.dataSource = self;
self.tableView.delegate = self;
}
func registerClasses() {
self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Default")
self.tableView.register(AlbumCell.self, forCellReuseIdentifier: "AlbumCell")
}
func registerPeekPopPreviews() {
//if (self.traitCollection.forceTouchCapability == .available) {
self.registerForPreviewing(with: self, sourceView: self.tableView)
//}
}
func doLayout() {
self.view.addSubview(self.tableView)
let views: [String: AnyObject] = ["tableView": self.tableView];
var constraints = Array<String>()
constraints.append("H:|-0-[tableView]-0-|")
constraints.append("V:|-0-[tableView]-0-|")
for constraint in constraints {
self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: constraint, options: NSLayoutFormatOptions(rawValue: 0), metrics: nil, views: views))
}
for view in self.view.subviews {
view.translatesAutoresizingMaskIntoConstraints = false
}
}
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return section == 0 ? 5 : 10
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return (indexPath as NSIndexPath).section == 0 ? 44.0 : 235.0
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return section == 0 ? 75.0 : 50.0
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0.0001
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return section == 0 ? "Library" : "Recently Added"
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if (indexPath as NSIndexPath).section == 0 { //Library
let cell = tableView.dequeueReusableCell(withIdentifier: "Default", for: indexPath)
switch (indexPath as NSIndexPath).row {
case 0:
cell.accessoryType = .disclosureIndicator
cell.textLabel?.text = "Playlists"
case 1:
cell.accessoryType = .disclosureIndicator
cell.textLabel?.text = "Artists"
case 2:
cell.accessoryType = .disclosureIndicator
cell.textLabel?.text = "Albums"
case 3:
cell.accessoryType = .disclosureIndicator
cell.textLabel?.text = "Songs"
case 4:
cell.accessoryType = .disclosureIndicator
cell.textLabel?.text = "Downloads"
default:
break
}
}
if (indexPath as NSIndexPath).section == 1 { //Recently Added
let cell = tableView.dequeueReusableCell(withIdentifier: "AlbumCell", for: indexPath)
cell.selectionStyle = .none
return cell
}
return tableView.dequeueReusableCell(withIdentifier: "Default", for: indexPath)
}
}
मुझे लगता है कि मैं कहां खो गया हूं कि मुझे स्वाइप करने की आवश्यकता नहीं है। मुझे पता है कि जब मैं 3 डी टेक्स्ट थ्रेड को स्पर्श करता हूं और स्वाइप करता हूं तो मुझे जवाब विकल्प मिलते हैं। लेकिन जब मैं 3 डी एल्बम को स्पर्श करता हूं, तो यह ऊपर दिखाए गए स्क्रीन को एनिमेट करता है। कोई स्वाइप या कुछ भी नहीं। –
यह वास्तव में UIPreviewInteraction API का उपयोग करके किया जा सकता है।
https://developer.apple.com/documentation/uikit/uipreviewinteraction
यह लगभग पीक और पॉप एपीआई के समान है।
यहां हमारे पास 2 चरण हैं: पूर्वावलोकन और कमिट जो बाद के एपीआई में पीक और पॉप के अनुरूप हैं। हमारे पास UIPreviewInteractionDelegate है जो हमें इन चरणों के माध्यम से संक्रमण तक पहुंच प्रदान करता है।
एक क्या करना चाहिए तो क्या हुआ, है ऊपर एप्पल संगीत पॉपअप को दोहराने के लिए,
मैन्युअल didUpdatePreviewTransition
के दौरान एक कलंक ओवरले दिखाने के ऊपर मेनू का एक xib निर्माण और didUpdateCommitTransition दौरान यह दिखाने
- आप व्यू ट्रांजिशन चरण के अंत में दृश्य बना सकते हैं।
असल में, सेब ने चैट ऐप के रूप में इसका एक डेमो बनाया है।
here से नमूना कोड डाउनलोड करें और इसका परीक्षण करें।
- 1. ऐप्पल संगीत
- 2. UITableView कक्षों पर पीक और पॉप UISearchController
- 3. मैं अपने ऐप में ऐप्पल संगीत में मिनीप्लेयर को कैसे कार्यान्वित कर सकता हूं?
- 4. मेरे आईओएस ऐप से ऐप्पल संगीत खोलना
- 5. पीक और पॉप कोई विकल्प नहीं
- 6. क्या मैं आईओएस वेबकिट कॉपी/पॉप अप मेनू को परिभाषित करने के लिए मेनू आइटम जोड़ सकता हूं?
- 7. मैं UINavigationBar के ढाल रंगों को दोहरा सकता हूं?
- 8. आईओएस 10 यूएनएनोटिफिकेशन एक्शन ऐप पृष्ठभूमि से
- 9. मैं जावास्क्रिप्ट में पाइथन के dict.items() को दोहरा सकता हूं?
- 10. ऐप्पल संगीत यूआरएल योजना
- 11. ऐप्पल संगीत शैली चयन स्क्रीन
- 12. मैं एक्सएएमएल में 'फ्लोट: दाएं' को दोहरा सकता हूं?
- 13. मैं कुंजी को दबाकर रख सकता हूं और इसे वीएससीओडी में दोहरा सकता हूं?
- 14. एक्शन बार और मेनू बटन दोनों को कैसे संभालें?
- 15. क्यूटी - पॉप अप मेनू
- 16. ऐप्पल मेनू को अनुकूलित करें
- 17. इसे और अधिक सुरुचिपूर्ण बनाने के लिए मैं इस हास्केल कोड को कैसे दोहरा सकता हूं?
- 18. मैं विम में अंतिम एन परिवर्तन कैसे दोहरा सकता हूं?
- 19. मैं आईओएस 10 सिम्युलेटर
- 20. मैं डेक से कितने तत्व पॉप() पॉप कर सकता हूं?
- 21. मैं एक स्ट्रिंग में अक्षर एन बार दोहरा सकता हूं?
- 22. मैं जावास्क्रिप्ट में स्ट्रिंग कैसे दोहरा सकता हूं?
- 23. GLUT पॉप-अप मेनू
- 24. पीक और पॉप - यूआईसीओलेक्शन व्यू में गलत सेल की ओर अग्रसर पॉप
- 25. एंड्रॉइड पॉप अप मेनू
- 26. पारदर्शी UINavigationBar (ऐप्पल संगीत जैसे नेविगेशन बार) में संक्रमण
- 27. मैं संगीत विजेट के साथ फेसबुक पर ग्रूवेशर्क संगीत यूआरएल कैसे साझा कर सकता हूं?
- 28. मैं आईओएस 10
- 29. मैं संगीत 21 के साथ संगीत से रीयल-टाइम ऑडियो आउटपुट कैसे उत्पन्न कर सकता हूं?
- 30. मैं ब्राउज़र एक्शन बैज को कैसे हटा सकता हूं?
क्या आप वाकई एक 3 डी टच है और न केवल एक लंबी प्रेस? यह मेरे आईफोन 6+ पर भी काम करता है जिसमें 3 डी टच नहीं है। – Fogmeister
@Fogmeister ठीक है तो मैं चला गया और 3 डी स्पर्श बंद कर दिया। यदि आप देखते हैं कि यह वही चीजें दिखाता है लेकिन एक रद्द बटन के साथ नीचे दिया गया है। मैं वास्तव में दोनों करना पसंद करूंगा। लेकिन मैं यह कैसे करूँगा यह मुद्दा अभी भी खड़ा है। –
एक चोटी और पॉप सेग्यू का उपयोग करने के बजाए इसे ट्रिगर करने के लिए कुछ प्रकार के बल स्पर्श इशारा का उपयोग करना संभव नहीं है? मैं फिलहाल अपने कंप्यूटर पर नहीं हूं लेकिन यही वह है जिसे मैं देखना चाहता हूं। – Fogmeister