我有一个带有UIRotationGestureRecognizer. 按预期工作,但我只想以 90 度的凹口/增量旋转。默认行为使您可以非常精细且精确地进行旋转。我希望它是相反的,只有 4 个可能的位置。
我下面的代码是我能得到的最接近的代码,但是我面临的问题是旋转仅发生一次,并且仅向一个方向(向右旋转,即使我两根手指向左旋转)。
我的代码
func rotatedView(recognizer:UIRotationGestureRecognizer){
let pi = CGFloat(M_PI)
rotateView.transform = CGAffineTransformMakeRotation(pi/2)
recognizer.rotation = 0
if recognizer.state == UIGestureRecognizerState.Changed {
print("rotation began")
}
else {
print("rotation ended")
}
}
Run Code Online (Sandbox Code Playgroud)
如何修改上面的代码以允许基于手势在任一方向上旋转 90 度增量?
在 App Store 上 3.5 个月后,我收到了我的第一份崩溃报告。这是今天早上在 iTunes Connect 中发现的。在 XCode 中,我转到窗口 > 管理器 > 崩溃 > [报告崩溃的应用程序 + 应用程序构建]。
然后我点击“在项目中打开” (这是上一个屏幕截图中的号召性用语按钮)
“在项目中打开”让我进入了 XCode。下面是调试导航器的样子:
class UIButtonScrollView: UIScrollView {
override func touchesShouldCancel(in view: UIView) -> Bool {
if (view.isKind(of: UIButton.self)) {
return true
}
return super.touchesShouldCancel(in: view)
}
}
Run Code Online (Sandbox Code Playgroud)
我猜这可能是导致崩溃的代码。这个 UIScrollView 子类的目的是处理应用程序中小滚动视图内一长串按钮的滚动(当用户手指直接在按钮上滚动时)。
崩溃报告称它发生在运行 9.1 的 iPhone 5s 上。我尝试了一切可能在该模拟器中重现崩溃,但不能。它对我来说完美无缺。
为什么/是什么导致 _GSRegisterPurpleNamedPortInPrivateNamespace 崩溃?我是否在错误的地方尝试调试我的代码 (UIButtonScrollView)?我想在它发生在另一个用户身上之前把它扼杀在屁股里。对我上述问题的任何指导表示赞赏。谢谢 :)
我正在使用喷气背包导航从片段过渡到细节片段。
我需要帮助在显示它的片段上呈现细节片段。
请参阅下面的照片以了解我想要实现的目标:
我还在导航图中的动画上使用基本的淡入/淡出作为输入退出。
这是我得到的结果:
如何设置过渡以便细节片段显示在呈现视图上?
这是我所有的进展:
底部导航菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/fragment_tab1"
android:title="Tab 1"/>
<item
android:id="@+id/fragment_tab2"
android:title="Tab 2"/>
<item
android:id="@+id/fragment_tab3"
android:title="Tab 3"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
导航图
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/nav_graph"
app:startDestination="@id/fragment_tab1">
<fragment android:id="@+id/fragment_tab1" android:name="com.example.navgraphfragmentmodal.Tab1" android:label="fragment_tab1"
tools:layout="@layout/fragment_tab1">
<action android:id="@+id/toModal" app:destination="@id/modalFragment"/>
</fragment>
<fragment android:id="@+id/fragment_tab2" android:name="com.example.navgraphfragmentmodal.Tab2" android:label="fragment_tab2"
tools:layout="@layout/fragment_tab2"/>
<fragment android:id="@+id/fragment_tab3" android:name="com.example.navgraphfragmentmodal.Tab3"
android:label="fragment_tab3" tools:layout="@layout/fragment_tab3"/>
<fragment android:id="@+id/modalFragment" android:name="com.example.navgraphfragmentmodal.ModalFragment"
android:label="fragment_modal" tools:layout="@layout/fragment_modal"/>
</navigation>
Run Code Online (Sandbox Code Playgroud)
主活动.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val navHostFragment = supportFragmentManager.findFragmentById(R.id.navigation_host_fragment) as NavHostFragment?
NavigationUI.setupWithNavController(bottom_navigation_view, navHostFragment!!.navController)
supportActionBar?.setDisplayShowHomeEnabled(true)
} …Run Code Online (Sandbox Code Playgroud) android android-fragments android-navigation android-transitions android-jetpack
我正在使用 Jetpack Navigation 来处理底部导航控制器。效果很好;但是,我正在寻找一种改进用户体验的方法。
是否可以禁用用户当前导航到的选项卡?
我可以“垃圾邮件”底部导航中的当前选项卡,这会不必要地重新加载数据和 UI。如果这种行为(重新点击当前选项卡)是有意的,有没有办法保留片段的状态,以便在导航离开时不会重新创建?
我如何处理底部导航:
navController = NavHostFragment.findNavController(navigation_host_fragment)
NavigationUI.setupWithNavController(bottom_navigation_view, navController)
Run Code Online (Sandbox Code Playgroud) 我有一个关于UICollectionView的基本问题,并将数据传递给多个视图控制器,具体取决于按下的单元格.
在ViewController.swift中 - 我有所有用于在控制器视图中显示单元格的代码.如你所见,我有一个小的打印线测试,告诉我哪个单元格(布局,最终)被轻敲.然后将我转到另一个由uniqueViewController.swift管理的视图控制器.
这个视图控制器(uniqueViewController.swift)我有一个标签(uniqueLabel),我想根据从ViewController点击的布局来改变文本.这是我难倒的数据部分的全部传递.任何代码片段和指导将不胜感激!谢谢.
ViewController.swift
import UIKit
class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
var data = [String]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
data = ["Layout one", "Layout two", "Layout three", "Layout four"]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return data.count
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) …Run Code Online (Sandbox Code Playgroud) 我有两个字符串数组,每个数组都有独特的内容和数据量.
我希望能够找到数出现在两个数组的项数的.
例:
var array1 = ["Duck", "Dog", "Cat", "Bird", "Elephant", "Cow", "Goat", "Goose"]
var array2 = ["Eagle", "Giraffe", "Cow", "Elephant", "Sheep", "Penguin", "Rhinoceros"]
Run Code Online (Sandbox Code Playgroud)
这应该打印2,因为Cow和Elephant同时出现在array1和array2中.
我的进展如下.这引发了一个错误:Closure元组参数'(offset:Int,element:(String,String))'不支持使用隐式参数进行解构
let compared = zip(array1, array2).enumerated().filter() {
$1.0.id == $1.1.id
}.count
print(compared)
Run Code Online (Sandbox Code Playgroud)
如何查找两个阵列中出现的项目数? 注意,永远不会有3个或更多阵列.总是会比较2个阵列.
我正在使用 Google AdMob v8 在同一视图控制器中实现插页式广告和奖励广告。
我需要能够确定哪个广告被忽略,以便我可以正确加载另一个广告。
func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd)
loadRewarded()
loadInterstitial()
}
Run Code Online (Sandbox Code Playgroud)
我上面的进度是加载奖励广告和插页式广告,无论哪个广告被驳回。
如何确定哪个广告(插页式广告或奖励广告)被驳回?
我正在努力研究用于"选择"UIViews的方法.在我的用户界面中,我有几个UIViews,我希望它是"可选择的".选中后,我将拥有控件来执行基本调整,例如alpha(让用户知道选择了哪个视图),以及略微更高级的功能,例如显示一组独特的菜单项.一次只能选择1个视图.这里没有多点触控.
问题是,我只看到过UICollectionViewCells.我的界面没有使用集合视图,所以这是不可能的.
进入此过程的思维过程是1点击手势以"选择"uiview,然后通过点击视图边界外部来"取消选择"它.
另一个思考过程是使用UIButtons而不是UIViews来利用Selected状态.
哪个是更可行的解决方案?使用UIViews甚至可以实现这一点吗?或者我应该回溯并转而使用UIButtons?
谢谢.