小编Joe*_*Joe的帖子

Swift - 旋转手势和 90 度的旋转增量

我有一个带有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 度增量?

pi rotation gesture swift

2
推荐指数
1
解决办法
2386
查看次数

_GSRegisterPurpleNamedPortInPrivateNamespace - App Store 崩溃(附代码)

在 App Store 上 3.5 个月后,我收到了我的第一份崩溃报告。这是今天早上在 iTunes Connect 中发现的。在 XCode 中,我转到窗口 > 管理器 > 崩溃 > [报告崩溃的应用程序 + 应用程序构建]。

下面的第一个屏幕截图是崩溃报告 GUI: 来自 XCode 管理器的崩溃日志

然后我点击“在项目中打开” (这是上一个屏幕截图中的号召性用语按钮)

“在项目中打开”让我进入了 XCode。下面是调试导航器的样子:

调试管理器

点击“7 main”会出现这个类: 班级

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)?我想在它发生在另一个用户身上之前把它扼杀在屁股里。对我上述问题的任何指导表示赞赏。谢谢 :)

crash xcode app-store ios swift

2
推荐指数
1
解决办法
690
查看次数

在具有透明背景的片段上呈现片段

我正在使用喷气背包导航从片段过渡到细节片段。

我需要帮助在显示它的片段呈现细节片段。

请参阅下面的照片以了解我想要实现的目标:

埃菲尔铁塔

我还在导航图中的动画上使用基本的淡入/淡出作为输入退出。

这是我得到的结果:

呈现视图的结果未显示在详细视图中

如何设置过渡以便细节片段显示在呈现视图上?

这是我所有的进展:

底部导航菜单

<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

2
推荐指数
1
解决办法
1924
查看次数

禁用底部导航控制器中的当前选项卡

我正在使用 Jetpack Navigation 来处理底部导航控制器。效果很好;但是,我正在寻找一种改进用户体验的方法。

是否可以禁用用户当前导航到的选项卡?

我可以“垃圾邮件”底部导航中的当前选项卡,这会不必要地重新加载数据和 UI。如果这种行为(重新点击当前选项卡)是有意的,有没有办法保留片段的状态,以便在导航离开时不会重新创建?

我如何处理底部导航:

navController = NavHostFragment.findNavController(navigation_host_fragment)
NavigationUI.setupWithNavController(bottom_navigation_view, navController)
Run Code Online (Sandbox Code Playgroud)

android kotlin android-navigation android-jetpack

2
推荐指数
1
解决办法
337
查看次数

通过Collection View单元格在ViewControllers之间传递数据

我有一个关于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)

cell uicollectionview swift

1
推荐指数
1
解决办法
3686
查看次数

你如何比较两个数组来获得类似对象的数量?

我有两个字符串数组,每个数组都有独特的内容和数据量.

我希望能够找到出现在两个数组的项数的.

例:

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个阵列.

arrays compare ios swift

1
推荐指数
1
解决办法
297
查看次数

adDidDismissFullScreenContent - 如何确定广告是插页式广告还是奖励广告?

我正在使用 Google AdMob v8 在同一视图控制器中实现插页式广告和奖励广告。

我需要能够确定哪个广告被忽略,以便我可以正确加载另一个广告。

func adDidDismissFullScreenContent(_ ad: GADFullScreenPresentingAd) 
    
    loadRewarded()
    loadInterstitial()
}
Run Code Online (Sandbox Code Playgroud)

我上面的进度是加载奖励广告和插页式广告,无论哪个广告被驳回。

如何确定哪个广告(插页式广告或奖励广告)被驳回?

admob swift

1
推荐指数
1
解决办法
838
查看次数

点击xcode/swift 3中的视图以"选择"它

我正在努力研究用于"选择"UIViews的方法.在我的用户界面中,我有几个UIViews,我希望它是"可选择的".选中后,我将拥有控件来执行基本调整,例如alpha(让用户知道选择了哪个视图),以及略微更高级的功能,例如显示一组独特的菜单项.一次只能选择1个视图.这里没有多点触控.

问题是,我只看到过UICollectionViewCells.我的界面没有使用集合视图,所以这是不可能的.

进入此过程的思维过程是1点击手势以"选择"uiview,然后通过点击视图边界外部来"取消选择"它.

另一个思考过程是使用UIButtons而不是UIViews来利用Selected状态.

哪个是更可行的解决方案?使用UIViews甚至可以实现这一点吗?或者我应该回溯并转而使用UIButtons?

谢谢.

uibutton uiview ios swift swift3

0
推荐指数
1
解决办法
5716
查看次数